在模拟一次类和在测试中两次模拟一个类时,我得到不同的输出。我知道@Mocked模拟了类的所有实例,但不确定多次模拟会影响新创建的对象的输出。 预期会出现这种情况吗?
测试1.打印 10 :
@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。打印 0 :
@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 !
}
答案 0 :(得分:1)
第二次测试,Date
模拟两次,默认情况下获得“实例间”匹配。所以,好像期望被记录为onInstance(d1).getTime();
。
模拟行为的这种差异仅在方便时自动激活。在同一测试中声明相同类型的多个模拟字段/参数的唯一原因是调用不同的模拟实例会产生不同的结果;自动“实例”匹配避免了在每个实例上使用onInstance(mock)
的需要。