2012-07-06 16 views
6

por lo que sé Visual Studio 2012 no admitirá Private Accessors. ¿Me puede dar algunas informaciones sobre posibles alternativas? PrivateObject.Invoke() no es la mejor solución para mí.Private Accessors en Visual Studio 2012

¡Gracias de antemano!

Respuesta

7

Marque sus miembros como "internos" y use el atributo InternalsVisibleTo. Fácil de usar y sin problemas de seguridad.

+0

Lo he hecho de esta manera antes de que se introdujeran los PrivaT eAccessors. Gracias! – llasarov

+0

Me parece interesante que muchos de los ensamblados de .NET Framework muestren los atributos de InternalsVisibleTo en Reflector. – bryanbcook

+0

Parece que hay un problema con el marco de Fakes. No puede cambiar las clases internas, incluso con InternalsVisibleTo set correctamente. PrivateObject.Invoke tampoco es una opción. Lamentablemente, al eliminar la compatibilidad con los accesadores, eliminaron la única forma que funcionaría para calzar una clase interna. – Finster

0

Tal vez esta publicación Home-made Private Accessor for Visual Studio 2012+ le ayudará a crear su propio accesorio privado.

Saludos,

Stefan

+2

Se encontró una pista para la herramienta de línea de comandos Publicize.exe (http://msdn.microsoft.com/en-us/library/dd569957%28v=vs.100%29.aspx) de Axel Mayer en el foro de MSDN (http: //social.msdn.microsoft.com/Forums/en-US/015e1ac7-acf3-4d83-ae0c-734c8957cde4/how-to-create-private-accessors-in-vs-2012?forum=vsunittest). Encontrado en VS 2012 y VS 2013 (Ultimate). Trabajó para .NET 4.0 y .NET 4.5, pero no para una aplicación de la Tienda Windows. Observe% Archivos de programa (x86)% \ Microsoft Visual Studio 11.0 \ Common7 \ IDE. La herramienta crea un dll que puede ser utilizado por el proyecto de prueba de su unidad. Mejor que escribir los accesorios tú mismo ;-) – Stefan

0

que empecé a usar la característica dinámica privada Accessor que es parte del paquete Nuget Chaining Assertion for MSTest y estoy bastante contento con él. Uno pierde un tipeo fuerte, pero al menos la sintaxis aún es legible. Esto funciona con la característica dinámica. También hay paquetes para otros marcos de prueba. El código de prueba se ve así:

var target = CreateMyObjectUnderTest(); 
dynamic dynamicTarget = target.AsDynamic(); 
Assert.AreEqual("abc", dynamicTarget.MyPrivateProperty); 
Assert.AreEqual("xyz", dynamicTarget.PrivateMethod(123)); 
Cuestiones relacionadas