Java 验证完成后,EasyMock在tearDown方法中验证对mock的调用

Java 验证完成后,EasyMock在tearDown方法中验证对mock的调用,java,unit-testing,testing,junit,easymock,Java,Unit Testing,Testing,Junit,Easymock,我在EasyMock测试中看到了我不理解的不一致行为 我的第一次考试通过了 public class MockATest { private final AtomicLong aMock = createStrictMock(AtomicLong.class); @Before public void setUp() { aMock.set(101L); } @After public void tearDown() { aMoc

我在EasyMock测试中看到了我不理解的不一致行为

我的第一次考试通过了

public class MockATest {

   private final AtomicLong aMock = createStrictMock(AtomicLong.class);

   @Before
   public void setUp() {
      aMock.set(101L);
   }

   @After
   public void tearDown() {
      aMock.set(999L);
   }

   @Test
   public void testA() {
      reset(aMock);
      replay(aMock);
      // TODO : test stuff here
      verify(aMock);
   }

}
。。但是我的第二次测试失败了

public class MockBTest {

   private final List<Long> bMock = createStrictMock(List.class);

   @Before
   public void setUp() {
      bMock.add(101L);
   }

   @After
   public void tearDown() {
      bMock.add(999L);
   }

   @Test
   public void testB() {
      reset(bMock);
      replay(bMock);
      // TODO : test stuff here
      verify(bMock);
   }

}
公共类MockBTest{
私有最终列表bMock=createStrictMock(List.class);
@以前
公共作废设置(){
b添加(101L);
}
@之后
公共无效拆卸(){
b库存添加量(999L);
}
@试验
公共无效测试b(){
重置(bMock);
重播(bMock);
//TODO:在这里测试
验证(bMock);
}
}
失败的原因是

意外的方法调用列表。添加(999)

我有两个问题真的

  • 为什么这两个测试的行为不同
  • 为什么在testB方法中的验证已经完全完成之后,tearDown方法中发生的add(999L)正在被验证
  • (我知道我可以通过在验证(bMock)之后添加另一个重置(bMock)来实现这一点,但我不确定这是否只是为了避免问题)

  • 为什么这两个测试的行为不同
  • 因为
    AtomicLong.set
    被键入
    void AtomicLong.set(long)
    ,所以它是一个void方法。录音很好。但是,
    List.add
    是键入的
    booleanlist.add(E)
    ,因此它不是一个void方法。记录非void方法的正确方法是执行
    expect(list.add(101L)).andReturn(true)

  • 为什么在testB方法中的验证已经完全完成之后,tearDown方法中发生的add(999L)正在被验证
  • 因为它从不进入
    testB()
    。EasyMock在调用
    setUp()
    中的
    bMock.add(101L)
    时抛出一个错误,因此它直接进入
    tearDown
    ,该过程也会失败,并隐藏到
    setUp()
    的异常中

  • 为什么这两个测试的行为不同
  • 因为
    AtomicLong.set
    被键入
    void AtomicLong.set(long)
    ,所以它是一个void方法。录音很好。但是,
    List.add
    是键入的
    booleanlist.add(E)
    ,因此它不是一个void方法。记录非void方法的正确方法是执行
    expect(list.add(101L)).andReturn(true)

  • 为什么在testB方法中的验证已经完全完成之后,tearDown方法中发生的add(999L)正在被验证

  • 因为它从不进入
    testB()
    。EasyMock在调用
    setUp()
    中的
    bMock.add(101L)
    时抛出一个错误,因此它会直接转到
    拆卸
    ,该拆卸也会失败,并隐藏到
    setUp()

    Doh的异常中-当然!谢谢亨利看到了显而易见的事实。当然!谢谢亨利看到了显而易见的事实。