簡體   English   中英

保存由Mockito監視的信息

[英]Save information that was spied by Mockito

我有一個JUnit測試為:

@Spy
ParallelSender parallelSender = new ParallelSender();


@Test
public void send() {   
    // making some data...
    parallelSender.send(someData);
    // check that internal method has been called with Sender Task made from someData
    verify(parallelSender).doSend(any(SenderTask.class));
}

但是,我想檢查一下SenderTask是否完全包含了我需要的所有字段。 我可以告訴間諜攔截doSend調用,將其參數存儲在某個數組中,然后繼續使用實數方法嗎?

您可以使用ArgumentCaptor

@Captor
ArgumentCaptor<SenderTask> captor;
// or ArgumentCaptor<SenderTask> captor = 
//         ArgumentCaptor.forClass(SenderTask.class);

@Test public void send() {
    // ...
    verify(parallelSender).doSend(captor.capture());
    SenderTask captured = captor.getValue();

使用ArgumentCaptor

@Test
public void send() {   
    // making some data...
    parallelSender.send(someData);

   // Define the captor for class
    ArgumentCaptor<SenderTask> captor =
        ArgumentCaptor.forClass(SenderTask.class);

    // Capture input while verifying
    verify(parallelSender).doSend(captor.capture());

    // Assert 
    SomeTask result = captor.getValue();
    // assertions on result
}

我很少使用參數捕獲器,因為通常沒有必要。 做這個

@Test
public void send() {   
    //given
    SomeData myInput = ...
    SenderTask expectedOutput = new SenderTask();
    expectedOutput.setSomeField(/*expected field value*/);

    //when
    parallelSender.send(myInput);

    //then
    verify(parallelSender).doSend(expectedOutput);
 }

背后的想法是檢查是否用預期對象調用了“ doSend”。

注意:只需確保您在SenderTask中實現了equals / hash方法-否則將無法正常工作

注意2:我建議避免在單元測試中使用any()。 通常,當您對某項進行單元測試時,您希望盡可能地精確。 因此,在結果驗證期間使用具體對象。

希望能有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM