Sé que esta es una pregunta muy antigua, pero me gustaría agregar mi experiencia allí. Recientemente cambié el hábito de las pruebas unitarias de proyectos separados al mismo.
¿Por qué?
Primero, tiendo a mantener la estructura de la carpeta principal del proyecto igual con el proyecto de prueba. Entonces, si tengo un archivo debajo, Providers > DataProvider > SqlDataProvider.cs
entonces estoy creando la misma estructura en mis proyectos de prueba unitaria comoProviders > DataProvider > SqlDataProvider.Tests.cs
Pero después de que el proyecto se hace cada vez más grande, una vez que mueve los archivos de una carpeta a otra, o de un proyecto a otro, se está volviendo un trabajo muy engorroso sincronizarlos con los proyectos de prueba unitaria.
En segundo lugar, no siempre es muy fácil navegar desde la clase que se va a probar hasta la clase de prueba unitaria. Esto es aún más difícil para JavaScript y Python.
Recientemente, comencé a practicar que, cada archivo que creé (por ejemplo SqlDataProvider.cs
) estoy creando otro archivo con sufijo de prueba, comoSqlDataProvider.Tests.cs
Al principio parece que hinchará archivos y referencias de bibliotecas, pero a largo plazo, eliminará el síndrome del archivo móvil a primera vista, y también se asegurará de que cada archivo que sean candidatos para ser probados tenga un archivo par con .Tests
sufijo Le permite saltar fácilmente al archivo de prueba (porque está uno al lado del otro) en lugar de mirar a través de un proyecto separado.
Incluso puede escribir reglas comerciales para escanear a través del proyecto e identificar la clase que no tiene el archivo .Tests e informarlas al propietario. También puede decirle a su corredor de prueba fácilmente que apunte a las .Tests
clases.
Especialmente para Js y Python, no necesitará importar sus referencias desde una ruta diferente, simplemente puede usar la misma ruta del archivo de destino que se está probando.
Estoy usando esta práctica durante un tiempo, y creo que es una compensación muy razonable entre el tamaño del proyecto y la capacidad de mantenimiento y la curva de aprendizaje para los recién llegados al proyecto.