Ich versuche, Spring zu bekommen, um EasyMock Mocks in meine Komponententests injizieren.Verwenden von Spring zu injizieren EasyMock Mocks verursacht ClassCastException
In meinem applicationContext.xml, ich habe dies:
<bean id="mockService" class="org.easymock.EasyMock" factory-method="createMock" name="MockService">
<constructor-arg index="0" value="my.project.Service"/>
</bean>
In meinem Unit-Test ich diese:
@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...
}
Wenn ich versuche, meinen Test auszuführen, erhalte ich diesen Stack-Trace:
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)
ich bin ganz neu sowohl auf Frühling und EasyMock, aber es scheint mir, dass der Fehler durch EasyMock verursacht wird versucht, ein mir anrufen thod auf, was es annimmt, eine Instanz von EasyMock zu sein, aber in Wirklichkeit ein dynamischer Proxy ist, der von Frühling geschaffen wird. Wie ich es verstehe, implementieren dynamische Proxys nur die Methoden, die in der Schnittstelle definiert sind, in diesem Fall die Schnittstelle für Service.
Was ich nicht verstehe ist, dass from what I read (auch here), was ich versuche zu erreichen zumindest scheint möglich zu sein.
Also meine Frage ist: Was ich mache ich nicht oder was mache ich falsch?
Ich habe mein Beispiel vor dem Posten etwas vereinfacht, um es einfacher zu verstehen. Die Sache ist, dass die getestete Klasse dafür verantwortlich ist, eine bestimmte Bean aus dem Anwendungskontext zur Laufzeit basierend auf ihrem Namen zu bekommen. Es schien naheliegend, diese Bean als Mock in der XML-Datei zu definieren. Immer noch verstehe ich Ihren Standpunkt, und Sie haben Recht. Ich glaube, ich habe ein paar Dinge gemischt und ein bisschen zu weit gegangen. – KaptajnKold
Dies wird nützlich, wenn Sie die Ausführung oder Verdrahtung eines Integrationstests durchführen möchten. Auf diese Weise können Sie z.B. Überprüfen Sie, ob Transaktionen korrekt angewendet werden. –