1
當我使用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的一個實例時,在A
的構造函數中調用B.addListener()
,不幸的是,即使我從不期望它,這個調用也會被EasyMock記錄下來。
因此,我的問題是EasyMock期望我在ATest
的每個測試用例中調用B.addListener()
。請給我任何建議來克服這一點。謝謝。
最後,我放棄了模擬框架。經過一週的工作,我使用繼承來模擬類,並用DI框架替換測試Taret的實現。現在我的單元測試很容易寫,也更清晰。 我相信DI框架的理念適合於單元測試,它可以幫助我優雅地替換測試對象的實現。另一方面,模擬框架在單元測試時幫助我,但它不像mockito那麼強大,並且有很多限制。 – papalagi
當DI和模擬框架無法一起工作時,我決定放棄模擬框架。也許其他人發現有用的時候只使用模擬框架。 – papalagi