Java 使用@Mocked多次模拟同一类时的JMockit行为
在测试中模拟一个类一次和模拟一个类两次时,我会得到不同的输出。我知道@Mocked会模拟一个类的所有实例,但我不确定为什么多次模拟会影响新创建对象的输出。 这种行为是预期的吗 测试1。打印10张:Java 使用@Mocked多次模拟同一类时的JMockit行为,java,junit,mocking,jmockit,Java,Junit,Mocking,Jmockit,在测试中模拟一个类一次和模拟一个类两次时,我会得到不同的输出。我知道@Mocked会模拟一个类的所有实例,但我不确定为什么多次模拟会影响新创建对象的输出。 这种行为是预期的吗 测试1。打印10张: @Test public void jmockitTest1(@Mocked final Date d1) { new NonStrictExpectations() {{ d1.getTime(); returns(10L);
@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 !
}
@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 !
}
第二个模拟日期的测试2。打印0:
@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 !
}
@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 !
}
第二个测试是模拟两次
Date
,默认情况下获得“on-instance”匹配。因此,就好像预期被记录为onInstance(d1.getTime()代码>
模拟行为中的这种差异只是为了方便而自动激活的。在同一测试中声明相同类型的多个模拟字段/参数的唯一原因是对不同模拟实例的调用会产生不同的结果;自动“实例上”匹配避免了在每个实例上使用onInstance(mock)
。第二个测试,在Date
模拟两次后,默认情况下获得“实例上”匹配。因此,就好像预期被记录为onInstance(d1.getTime()代码>
模拟行为中的这种差异只是为了方便而自动激活的。在同一测试中声明相同类型的多个模拟字段/参数的唯一原因是对不同模拟实例的调用会产生不同的结果;自动“实例上”匹配避免了在每个实例上使用onInstance(mock)