1

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

1 回答 1

1

第二个测试,经过Date两次模拟,默认情况下获得“实例”匹配。所以,就好像期望被记录为onInstance(d1).getTime();

模拟行为的这种差异只是为了方便而自动激活。在同一个测试中声明多个相同类型的模拟字段/参数的唯一原因是调用不同的模拟实例会产生不同的结果;自动“实例”匹配避免了onInstance(mock)在每个实例上使用的需要。

于 2012-03-29T20:48:47.317 回答