Java 使用@Mocked多次模拟同一类时的JMockit行为

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);

在测试中模拟一个类一次和模拟一个类两次时,我会得到不同的输出。我知道@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 !
 }
 @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)