Bonjour,
Mock et inversion de contrôle.
ça n'a rien à voir, c'est complémentaire, c'est concurrent ?
Merci,
Version imprimable
Bonjour,
Mock et inversion de contrôle.
ça n'a rien à voir, c'est complémentaire, c'est concurrent ?
Merci,
c'est complémentaire ! Cela rend le code testable. L'inversion de controle, et plus particulierement l'injection de dépendances permet de poser des tests en passant des mocks.
Si je veux tester doOperation, je ne peux pas car je n'ai pas d'autre choix que d'utiliser le vrai Dao. Si j'utilise l'injection de dépendances, les tests sont plus faciles à poser car on a accès à une référence du dao.Code:
1
2
3
4
5
6
7
8 class MyClass { public MyClass(){ } void doOperation(){ MyDao dao = new Dao(); dao.doOperation(); } }
Le test devient posable:Code:
1
2
3
4
5
6
7
8
9
10 class MyClass { MyDao dao; public MyClass(MyDao dao){ this.dao = dao; } void doOperation(){ dao.doOperation(); } }
Les responsabilités sont maintenant bien découpées : MyClass s'occupe de la logique métier mais c'est l'IOC par le biais d'injection de dépendance ou de factory qui s'occupe de dessiner les graphes d'objets. Je peux mettre les mocks que je veux.Code:
1
2
3
4
5
6
7
8 @Test public void testDoOperation { MyClass myClass = new MyClass(mockDao); myClass.doOperation(); // assertions }