J'essaie d'amener Spring à injecter des mocks EasyMock dans mes tests unitaires.L'utilisation de Spring pour injecter des mocks EasyMock provoque ClassCastException
Dans mon applicationContext.xml, je ceci:
<bean id="mockService" class="org.easymock.EasyMock" factory-method="createMock" name="MockService">
<constructor-arg index="0" value="my.project.Service"/>
</bean>
Dans mon test unitaire j'ai ceci:
@Autowired
@Qualifier("mockService")
private Service service;
public void testGetFoo() {
Foo foo = new Foo();
expect(service.findFoo()).andReturn(foo);
replay(service); // <-- This is line 45, which causes the exception
// Assertions go here...
}
Lorsque je tente de lancer mon test, je reçois cette trace de la pile:
java.lang.ClassCastException: org.springframework.aop.framework.JdkDynamicAopProxy
at org.easymock.EasyMock.getControl(EasyMock.java:1330)
at org.easymock.EasyMock.replay(EasyMock.java:1279)
at TestFooBar.testGetFoo(TestVodServiceLocator.java:45)
Je suis tout à fait nouvelle à la fois du printemps et EasyMock, mais il me semble que l'erreur est causée par EasyMock essayant d'appeler un moi thod sur ce qu'il suppose être une instance d'EasyMock, mais est en réalité un proxy dynamique créé par Spring. Si je comprends bien, les proxies dynamiques implémentent uniquement les méthodes définies dans l'interface, dans ce cas l'interface pour Service. Ce que je ne comprends pas, c'est que from what I read (également here), ce que j'essaie de réaliser au moins semble être possible.
Donc, ma question est: Qu'est-ce que je ne fais pas ou que fais-je tort?
J'ai simplifié un peu mon exemple avant de le poster, pour le rendre plus simple à comprendre. Le fait est que la classe testée est responsable de l'obtention d'un bean particulier du contexte de l'application au moment de l'exécution en fonction de son nom. Il semblait évident de définir ce bean comme un faux dans le fichier xml. Pourtant, je comprends votre point de vue, et vous avez raison. Je pense avoir mélangé certaines choses et aller un peu trop loin. – KaptajnKold
Cela devient utile si vous voulez intégrer l'exécution de conseils de test ou le câblage. De cette façon, vous pouvez, par exemple, vérifier si les transactions sont correctement appliquées. –