0
注意:爲了預期那些希望指出具有構造其內部對象的代碼的不良設計,而不是通過依賴注入,或容易被嘲笑的工廠;我正在爲遺留代碼編寫測試,其中將代碼重構爲更現代的設計不是一種選擇。使用PowerMockito如何驗證構造函數是否被調用,以及一組特定的參數
我有一個命令方法,當它執行時將在類MyObjectWrapper中構建三個對象,該對象依賴於另一個類MyObject。在測試中,這兩個類和6個對象都被嘲笑。請看下面的代碼:
@RunWith(PowerMockRunner.class)
@PrepareForTest(MyCommand.class)
public class MyCommandTest {
@Mock public MyObject objectOne;
@Mock public MyObject objectTwo;
@Mock public MyObject objectThree;
@Mock public MyObjectWrapper wrapperOne;
@Mock public MyObjectWrapper wrapperTwo;
@Mock public MyObjectWrapper wrapperThree;
private MyCommand command;
@Before public void beforeEach() {
command = new MyCommand();
MockitoAnnotations.initMocks(this);
initialiseWrapper(wrapperOne, objectOne, true, false);
initialiseWrapper(wrapperTwo, objectTwo, false, false);
initialiseWrapper(wrapperThree, objectThree, true, true);
}
private void initialiseWrapper(MyObjectWrapper wrapperMock, MyObject objMock, boolean option1, boolean option2) {
wrapperMock = PowerMockito.mock(MyObjectWrapper.class);
PowerMockito.whenNew(MyObjectWrapper.class)
.withParameters(MyObject.class, Boolean.class, Boolean.class)
.withArguments(objMock, option1, option2)
.thenReturn(wrapperMock);
}
@Test public void testConstructoresCalled() throws Exception {
command.execute();
VERIFY constructor with arguments: objectOne, true, false
VERIFY constructor with arguments: objectTwo, false, false
VERIFY constructor with arguments: objectThree, true, true
}
}
我知道,我可以證實,構造與所謂的3倍:
PowerMockito.verifyNew(MyObjectWrapper.class, times(3));
不過,我需要確認的構造被稱爲,在經過三個參數。是否有可能做到這一點?
將返回一個對象,我可以證實,發生了什麼時,3個構造函數的調用? –
你必須驗證每個電話(如果我沒記錯的話) – 2017-12-18 13:58:21
謝謝。 PowerMockito.verifyNew(MyObjectWrapper.class).withArguments(objectOne,true,false);是正確的解決方案。 –