¿Es posible acceder a un campo privado en una prueba unitaria?Probar un campo privado usando MSTest
Respuesta
La manera de conseguir campos privados o métodos en general es utilizar la reflexión. Sin embargo, el marco de prueba de la unidad incluye una clase de ayuda, PrivateObject
, para hacerlo más fácil. Vea el docs. En general, cuando he utilizado esto, he terminado haciendo un métodos de extensión como las siguientes:
public static int GetPrivateField(this MyObject obj)
{
PrivateObject po = new PrivateObject(obj);
return (int)po.GetField("_privateIntField");
}
Si usted necesita para obtener campos privados en una clase estática, sin embargo, tendrá que ir con reflejo recto.
No. Si escribe buenas Pruebas unitarias, no debería necesitar acceder a ningún campo privado. Las pruebas unitarias deben probar que, cuando se pasan en un conjunto conocido de valores, un método se comporta de cierta manera (ya sea devolviendo los datos apropiados o usando las dependencias de manera conocida).
Si está intentando probar la versión posterior, use Inyección de dependencia para inyectar las dependencias en la clase que está probando. Tendrás acceso completo a esas dependencias para tus pruebas.
Gracias chicos, no me di cuenta de que estaba violando los principios de TDD. Gracias – Michelle
La pregunta era si era posible, no si era una buena práctica. – stuartd
Aunque estoy de acuerdo con Justin en teoría, en la práctica uno a menudo tiene que escribir pruebas unitarias para código subóptimo que no se puede cambiar o no se puede cambiar fácilmente. – Dave
No digo que sea una buena idea, pero he visto el uso de InternalsVisibleTo.
Mira esta P. Una de las respuestas más impopulares:
- 1. Cómo probar atributos de la unidad con MsTest usando C#?
- 2. Visibilidad Java campo privado
- 3. ¿Es privado un campo C# por defecto?
- 4. ¿Cómo me burlo de un campo privado?
- 5. Busque un campo privado con Reflection?
- 6. Usando MSTest con CruiseControl.NET
- 7. Usando MSTest con F #
- 8. ¿Cómo probar las funciones en un directorio privado?
- 9. Establecer el valor del campo estático privado
- 10. ¿Cómo se prueba un código asíncrono usando MSTest?
- 11. Cómo simular objetos usando MSTest?
- 12. Reflejando un campo privado de una clase base
- 13. usando Jasmines spyon con un método privado
- 14. ¿Puedo cambiar un campo heredado de solo lectura privado en C# usando reflexión?
- 15. ¿Cómo puede hibernate acceder a un campo privado?
- 16. ¿Una propiedad abstracta crea un campo de respaldo privado?
- 17. ¿Cómo probar un formulario con un campo captcha en django?
- 18. MSTest Code Coverage
- 19. MSTest + ajedrez en VS 2010
- 20. ¿Cómo invoco un método estático privado usando reflection (Java)?
- 21. MSTest & AppDomains
- 22. ¿Propagación automática de javadoc de campo privado a getters/setters?
- 23. ¿Cómo acceder y mutar el campo privado en scala?
- 24. C# campo protegido a privado, agregar propiedad, ¿por qué?
- 25. MSTEST PrincipalPermission
- 26. cómo probar mail() usando PHPUnit
- 27. ¿Inyectar en un campo privado, de paquete o público o proporcionar un setter?
- 28. Serializando un campo DataType = "time" usando XmlSerializer
- 29. Django actualiza un campo usando ModelForm
- 30. ¿Cómo minizo un campo usando Handlebars.js?
Gracias @mike Lo he intentado y funciona bien. – Michelle
@Michelle De nada. –
Puede obtener y establecer campos privados en una clase estática utilizando un objeto ['PrivateType'] (http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.privatetype.aspx) (a diferencia del tipo PrivateObject!) – stuartd