2017-12-18 163 views
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)); 

不過,我需要確認的構造被稱爲,在經過三個參數。是否有可能做到這一點?

回答

0

PowerMockito.html#verifyNew返回ConstructorArgumentsVerification,所以使用返回的對象,看到ConstructorArgumentsVerification javadoc

+0

將返回一個對象,我可以證實,發生了什麼時,3個構造函數的調用? –

+0

你必須驗證每個電話(如果我沒記錯的話) – 2017-12-18 13:58:21

+0

謝謝。 PowerMockito.verifyNew(MyObjectWrapper.class).withArguments(objectOne,true,false);是正確的解決方案。 –

相關問題