Estamos utilizando StructureMap en un nuevo proyecto de desarrollo de software. Uno de los miembros del equipo ha implementado una prueba de unidad que básicamente prueba la configuración del contenedor de StructureMap . Hace esto haciendo lo siguiente;
- Cuenta el número de instancias de ensamblajes configurados para clases en el espacio de nombres de nuestra aplicación.
- Define instancias esperadas a nivel de clase
- Afirma que las instancias esperadas coinciden con el total de instancias encontradas.
- Afirma que las instancias esperadas coinciden con las definidas en la prueba
Un ejemplo de esto es;
var repositories = container.GetAllInstances<IEnvironmentRepository>();
Assert.AreEqual(1, repositories .Count());
foundInstances = foundInstances + repositories .Count();
También tenemos 'pruebas unitarias' para la siguiente clase;
public MyClass(IEnvironmentRepository environmentRepository)
{
}
En estas pruebas, nos burlamos de IEnvironmentRepository, por lo que no lo inyectaríamos desde el contenedor como sucedería en el sistema en vivo.
Un colega ignoró la prueba de la unidad en la configuración del mapa de estructura con un comentario en la línea de "La prueba de la unidad solo prueba su propia configuración". Obviamente, este era el propósito de la prueba y, en mi opinión, es perfectamente válido. Le pedí al tipo que ignoró la prueba que eliminara la configuración del mapa de estructura para IEnvironmentRepository(con la prueba aún ignorada) y ejecutara el conjunto de pruebas de la unidad completa, todos pasaron. Luego ejecutamos la aplicación y se cayó porque la configuración del contenedor ahora no era válida. En mi opinión, esto demostró el valor de la prueba, mi colega aún no estaba de acuerdo. Simplemente declaró que no deberíamos probar la configuración, pero considero que esto está dentro del alcance de una prueba unitaria.
Entonces una serie de preguntas;
- ¿Es una prueba de unidad válida? Estamos probando la configuración de nuestro contenedor, no que el mapa de estructura funcione (pero puedo ver la superposición)
- Si no, ¿cómo puede validar la configuración sin probarla? ¿Cómo puede evitar que alguien elimine accidentalmente una línea de código requerida y la registre?
- ¿Debería la
MyClassprueba unitaria resolver la instancia delIEnvironmentRepositorycontenedor y pasar esto?