【发布时间】:2009-05-28 10:58:26
【问题描述】:
我正在尝试让 Spring 在我的单元测试中注入 EasyMock 模拟。
在我的 applicationContext.xml 中,我有这个:
<bean id="mockService" class="org.easymock.EasyMock" factory-method="createMock" name="MockService">
<constructor-arg index="0" value="my.project.Service"/>
</bean>
在我的单元测试中,我有这个:
@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...
}
当我尝试运行我的测试时,我得到了这个堆栈跟踪:
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)
我对 Spring 和 EasyMock 都很陌生,但在我看来,错误是由 EasyMock 试图调用一个假定为 EasyMock 实例的方法引起的,但实际上是由创建的动态代理春天。据我了解,动态代理仅实现接口中定义的方法,在本例中为 Service 的接口。
我不明白的是from what I read(也是here),我试图实现的至少似乎是可能的。
所以我的问题是:我没有做什么或者我做错了什么?
【问题讨论】:
标签: unit-testing spring dependency-injection mocking easymock