2012-03-23 76 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)的需要。