Deridere classi interne con RhinoMocks
-
06-07-2019 - |
Domanda
Quindi ho un sacco di classi interne che sto cercando di deridere con RhinoMocks. Ho aggiunto la seguente riga a assemblyinfo.cs:
[assembly:InternalsVisibleTo(RhinoMocks.StrongName)]
Tuttavia, questo ancora non mi permette di deridere le classi interne; Ricevo il seguente messaggio di errore da NUnit:
MyTests.SomeTest: System.TypeLoadException: metodo "SomeMethod" sul tipo 'SomeType504cf40be6b444abfd417dccf5d6752' dal montaggio 'DynamicProxyGenAssembly2, Versione = 0.0.0.0, Cultura = neutro, PublicKeyToken = null 'ha la precedenza su a metodo che non è visibile da quello assemblaggio.
Nota che sto usando la versione "unita" di RhinoMocks (piuttosto che l'opzione di download "con gli assiemi Castle"). Non so come Castle sia stato unito a RhinoMocks ma non dovrei rendere i miei interni visibili a RhinoMocks, allo stesso modo renderlo visibile a Castle (che fa parte di Rhino.Mocks.dll)?
Soluzione
E così finalmente ho avuto un po 'di tempo e ho capito che tutto quello che dovevo fare era aggiungere quanto segue a AssemblyInfo.cs:
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
Altri suggerimenti
Il tuo problema è che RhinoMocks genera dinamicamente un assembly con proxy dinamici. Quindi rendere visibili i tuoi interni a RhinoMocks non aiuta. Le uniche possibili soluzioni al tuo problema che vedo sono:
- Rendi pubbliche le classi che desideri prendere in giro.
- Scrivi manualmente una classe finta nell'assieme dei progetti di test e modifica l'attributo InternalVisibleTo per concedere l'accesso all'assieme di test.