Supongamos que tengo una clase de C++, así:C++ y la inyección de dependencias en las pruebas unitarias
class A
{
public:
A()
{
}
void SetNewB(const B& _b) { m_B = _b; }
private:
B m_B;
}
Con el fin de probar la unidad algo así, tendría que romper la dependencia de A en B. Puesto que la clase A se aferra un objeto real y no un puntero, tendría que refactorizar este código para tomar un puntero. Además, necesitaría crear una clase de interfaz padre para B, así puedo pasar mi propia falsificación de B cuando pruebo SetNewB.
En este caso, no realiza pruebas con unidad de inyección de dependencias complicar aún más el código existente? Si hago de B un puntero, ahora estoy introduciendo la asignación de heap, y ahora parte del código es responsable de limpiarlo (a menos que use punteros refominados). Además, si B es una clase bastante trivial con solo un par de variables y funciones miembro, ¿por qué introducir una interfaz completamente nueva en lugar de simplemente probar con una instancia de B?
supongo que se podría hacer el argumento de que sería más fácil refactorizar Un mediante el uso de una interfaz. ¿Pero hay algunos casos en que dos clases pueden necesitar estar estrechamente vinculadas?
interesante, supongo que estaba imaginando que las pruebas unitarias requeridas todas las clases para ser completamente desacoplados entre sí. Pero como usted señala, A necesita absolutamente B para funcionar; entonces ellos son en realidad una unidad. – lhumongous