我有一個類接收工廠作爲參數在構造函數中調用。它必須在那裏被調用,因爲對象在可以被使用之前應該被完全初始化。例如:如何使用easymock在構造函數上模擬方法調用?
class MyClass {
private Foo foo;
MyClass(FooFactory fooFactory, Bar bar) {
this.foo = fooFactory.newFoo(bar);
}
}
Foo的實例無法直接傳遞給構造函數,因此請考慮這是對問題的限制。 MyClass的不能使用EasyMock的,因爲fooFactory是,這不是在設置初始化一個模擬測試:
private MyClass myClass;
public void setUp() {
FooFactory fooFactory = mock(fooFactory);
Bar bar = new Bar();
myClass = new MyClass(fooFactory, bar)
}
所以當安裝程序被調用,在構造函數中調用了fooFactory.newFoo(bar)
將失敗,一個IllegalStateException,因爲沒有這樣的期望已經確定。
問題是,你怎麼可以在構造函數中模擬方法調用?
爲什麼不能在setUp()方法中設置fooFactory的期望值? – artbristol 2011-06-08 17:18:45
由於構造函數在replay()之前調用fooFactory.newFoo(bar),所以它會被調用並拋出異常。如果您在setUp中調用replay(),則不能在其他測試中嘲笑其他任何東西。 – peninha 2011-06-08 17:21:51