2012-03-23 82 views
1

當一次模擬一個類並在測試中嘲笑類兩次時,我會得到不同的輸出。我知道@Mocked嘲笑一個類的所有實例,但我不知道爲什麼嘲笑多次會影響新創建的對象的輸出。 預期這種行爲?使用@Mocked多次嘲笑同一類時的JMockit行爲

測試1.打印:

@Test 
public void jmockitTest1(@Mocked final Date d1) 
{ 
     new NonStrictExpectations() 
     {{ 
      d1.getTime(); returns(10L); 
     }}; 

     System.out.println(d1.getTime()); // prints 10 
     System.out.println(new Date().getTime()); // prints 10 ! 
} 

測試2與第二嘲笑日期。打印:

@Test 
public void jmockitTest2(@Mocked final Date d1, @Mocked final Date d2) 
{ 
     new NonStrictExpectations() 
     {{ 
      d1.getTime(); returns(10L); 
     }}; 

     System.out.println(d1.getTime()); // prints 10 
     System.out.println(new Date().getTime()); // prints 0 ! 
} 

回答

1

第二次測試,與Date嘲笑兩次,得到 「上,例如」 默認匹配。所以,就好像期望值被記錄爲onInstance(d1).getTime();

這種模擬行爲的差異僅僅是爲了方便而自動激活。在同一個測試中聲明多個相同類型的模擬字段/參數的唯一原因是對調用不同模擬實例的結果不同。自動「實時」匹配避免了在這些實例中的每一個上使用onInstance(mock)的需要。