2012-05-28 14 views

Respuesta

7

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.

+0

Gracias @mike Lo he intentado y funciona bien. – Michelle

+0

@Michelle De nada. –

+1

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

2

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.

+0

Gracias chicos, no me di cuenta de que estaba violando los principios de TDD. Gracias – Michelle

+2

La pregunta era si era posible, no si era una buena práctica. – stuartd

+0

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

Cuestiones relacionadas