Pregunta

¿Dónde poner las pruebas unitarias para eventos privados en las clases de C #?

artículo en Wikipedia sugiere:

  • Poner pruebas en la misma clase que los miembros que están probando
  • Uso de clases parciales

En lo personal, ninguno de estos métodos parecen apropiadas, y yo preferiría tener pruebas unitarias ubicados en un proyecto separado por completo.

¿Alguna idea sobre esto?

(Sé que hay una buena cantidad de debate sobre si los métodos privados deben ser probados en absoluto. Me gustaría escuchar ambos lados de la discusión.)

¿Fue útil?

Solución

Los métodos privados no necesariamente tienen que ser probado directamente. Puede determinar su validez basada en las pruebas de los métodos públicos que utilizan esos métodos privados.

Sin embargo, se debe tener cuidado para asegurarse de que sus métodos públicos pueden inyectar fácilmente las dependencias simulacros en sus métodos particulares para facilitar las pruebas y simular todos los escenarios razonables.

Editar En cuanto a dónde deben ubicarse las otras pruebas, sugiero un subdirectorio separado dentro de su proyecto para manejar sus pruebas. Al escribir pruebas para aplicaciones PHP, tengo una pruebas de directorio en la raíz de mi proyecto cuya estructura de directorios es idéntica a la de mi estructura de directorios de aplicación real. En ella, tengo una clase de prueba para cada clase real.

Pero no se compilar sus clases de prueba con el resto de su proyecto cuando se libera a la producción (o en el caso de un lenguaje como PHP interpretted, no implemente las clases de prueba al servidor web de producción).

Otros consejos

No pruebe la unidad de métodos privados. Las pruebas unitarias son para probar la interfaz visible (por lo público y protegido) de una clase. Los métodos privados son detalles de implementación y las pruebas de la unidad de escritura para ellos es innecesario (su comportamiento se debe probar de forma implícita por las pruebas sobre los métodos visibles), conduce a pruebas frágiles (como los detalles de implementación podrían cambiar) y es una barrera para la refactorización.

Si usted tiene un método privado que siente la necesidad de prueba de unidad, que es un buen indicio de que tal vez debería tenerse en cuenta a cabo en un método público en otra clase.

  

¿Dónde poner las pruebas unitarias para eventos privados en las clases de C #?

En ninguna parte. No existen.

En general, mis pruebas de unidad están en proyectos separados.

También personalmente gustaría tener pruebas unitarias en un proyecto separado. Si desea unidad de prueba un método privado, que podría hacer que el método privado interno en su lugar. A continuación, puede hacer que los métodos internos visibles para las pruebas unitarias para llamar directamente añadiendo lo siguiente a AssemblyInfo.cs:

[assembly: InternalsVisibleTo("MyAssembly.UnitTests")]

Usted debe hacer lo que funciona para usted; esto es lo que funciona para mí:

Mi unidad es una clase : eso es lo que estoy tratando de probar. No es un método. Estoy tratando de hacer la programación orientada a objetos, así que poner mi atención en los objetos.

Si me encuentro tentado a probar un método privado, necesito refactor . Sólo quiero probar un método privado directamente porque hay demasiada otro código entre ella y las pruebas, y porque el método privado es complejo en sí suficiente como para necesitar la atención de pruebas. Por lo tanto, voy a clase suelen extraer a tirar de ese método privado, y otros miembros relacionados a una nueva clase.

Mis clases tienden a ser bastante pequeño . Son fáciles de leer y entender. Mis métodos, por supuesto, también son muy pequeños y fáciles de entender.

Hacer la transición a esta forma de trabajar me requerida para replanteamiento muchos de mis supuestos y hábitos sobre la programación. Lo que antes parecía radical parece ahora un lugar común.

Estoy de acuerdo que los métodos privados no deben probarse, en general, ya que sólo debe probar las interfaces públicas.

Una vez dicho esto, hay razones por las que podría querer poner a prueba los métodos privados:

  1. Está utilizando TDD, y usted tiene que desarrollar un método privado compleja. La creación de métodos de ensayo para el método privado puede ser necesario para mantener su escritura Ensayos escribir código -. Ciclo de pruebas al tamaño de grano

  2. Usted puede ser parte de un equipo en el que otros pueden necesitar modificar el método privado, y desea que las pruebas para asegurar que los cambios no crean problemas.

Algunas soluciones:

  1. Declarar algunos métodos que son públicos que el delegado al método privado y se utilizan sólo para propósitos de prueba. Estos podrían ser, por ejemplo, el prefijo con TestFoo1, TestFoo2 etc.

  2. El uso interno

http://msdn.microsoft.com/ en-us / library / 7c5ka91b (VS.80) .aspx

Su título de la pregunta y la primera frase son diferentes. :)

No estoy seguro acerca de dónde colocar sus pruebas. Ello dependerá de la lengua y C # no es algo que estoy familiarizado con, pero me imagino que una parte sustancial de su código está dentro de los métodos privados. Me sentiría incómodo si eso no se puso a prueba. la cobertura de código bajaría un poco.

Utilizamos métodos de acceso privado en Visual Studio para probar métodos privados. Esto significa que las clases de prueba que pueden vivir en un proyecto separado.

Sin embargo, tratamos de limitar realmente el número de éstos, ya que:

  • un método privado que puede estar solo se puede sacar como un método público en otra clase
  • métodos privados que no hacen nada particularmente útil fuera de la clase pueden ser probadas a través de los métodos públicos de la clase

absolutamente sí. métodos privados se deben probar de todos modos. y MbUnit marco de pruebas unidad puede miembro privado de acceso.

ver este blog: métodos de prueba privados

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top