c# - usar - ¿Cómo hacer interfaces internas visibles para Moq?
que es una interfaz en programacion orientada a objetos (1)
Tengo 3 proyectos en mi solución C #.
- Firmas
- Estructuras
- Pruebas
Las firmas tienen interfaces públicas e internas. Tambien tiene
[assembly: InternalsVisibleTo("Structures")]
[assembly: InternalsVisibleTo("Tests")]
en AssemblyInfo.cs de.
Estructuras tiene clases públicas e internas y
[assembly: InternalsVisibleTo("Tests")]
en AssemblyInfo.cs de.
Pruebas tiene la siguiente fuente:
<packages>
<package id="Moq" version="4.2.1409.1722" targetFramework="net45" />
<package id="NUnit" version="2.6.4" targetFramework="net45" />
<package id="NUnitTestAdapter" version="1.2" targetFramework="net45" />
</packages>
como paquetes NuGet en packages.config.
Escribí algunas pruebas unitarias para la interfaz interna de Firmas y la clase interna de Estructuras. Ejecutar, y tenía el siguiente resultado: excepción:
Type Signatures.InterfaceX no es visible para DynamicProxy. No se puede crear proxy para tipos que no son accesibles. Haga que el tipo sea público o interno y marque su ensamblaje con el atributo [assembly: InternalsVisibleTo (InternalsVisible.ToDynamicProxyGenAssembly2)].
Parece lógico. Agregué [assembly: InternalsVisibleTo ("InternalsVisible.DynamicProxyGenAssembly2")] a la información de ensamblaje de proyectos de Firmas y Estructuras. Ejecutar, y tenía el siguiente resultado: excepción:
Escriba ''Castle.Proxies.IReminiscenceableDataTableProxy'' del ensamblado ''DynamicProxyGenAssembly2, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = null'' está intentando implementar una interfaz inaccesible.
Esto fue para ayudar, pero no lo hizo. Solo cambia el mensaje de excepción.
¿Cómo solucionar mi problema?
El mensaje de corrección sugerido utiliza un campo const / static para el nombre del ensamblaje:
[assembly: InternalsVisibleTo(InternalsVisible.ToDynamicProxyGenAssembly2)]
Usaste una cadena que no corresponde al nombre del ensamblado:
[assembly: InternalsVisibleTo("InternalsVisible.DynamicProxyGenAssembly2")]
Cambiarlo a:
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
Puede ver el nombre del ensamblaje real (que debería aparecer en InternalsVisibleTo
) en su mensaje de error:
Escriba ''Castle.Proxies.IReminiscenceableDataTableProxy'' desde el ensamblado '' DynamicProxyGenAssembly2 (...)