当我使用EasyMock和Guice框架编写测试时,我遇到了一个问题。代码如下:
class A {
B b;
@Inject
public A(B b) {
this.b = b;
this.b.addListener(this);
}
}
class ATest {
@Inject
A a;
B b;
class InjectionModule extends AbstractModule {
protected void configure() {
b = createMock(B.class);
bind(B.class).toInstance(b);
}
}
public void setUp() {
createInjector(new InjectionModule()).injectMembers(this);
}
public void testSomething() {
replay(b);
a.doSomething();
verify(b);
}
}
在ATest
中,我用模拟对象替换B实现。但是当注入器创建A的实例时,B.addListener()
的构造函数中会调用A
,不幸的是,即使我没想到它,EasyMock也会记录此调用。
因此,我的问题是EasyMock希望我在B.addListener()
的每个测试用例中调用ATest
。请给我任何克服这一点的建议。感谢。
答案 0 :(得分:3)
我认为问题在于你正在尝试使用DI框架对一个类进行单元测试(这总是很痛苦)。
为什么不自己实例化A并在此过程中删除8行代码?