gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 20:48:18 26 4
gpt4 key购买 nike

我在 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);
}

}

失败原因是

Unexpected method call List.add(999)

我真的有两个问题......

  1. 为什么 2 个测试的行为不同?
  2. 为什么在testB方法中验证已经完全完成后,tearDown方法中发生的add(999L)还在验证?

(我知道我可以通过在验证(bMock)之后添加另一个重置(bMock)来完成这项工作,但我不确定这是否只是为了避免这个问题)

最佳答案

  1. 为什么 2 个测试的行为不同?

因为 AtomicLong.set 的类型是 void AtomicLong.set(long) 所以它是一个 void 方法。录音很好。但是,List.add 的类型为 boolean List.add(E),因此它不是无效方法。记录非 void 方法的正确方法是执行 expect(list.add(101L)).andReturn(true)

  1. 为什么在testB方法中验证已经完全完成后,tearDown方法中发生的add(999L)还在验证?

因为它永远不会进入 testB()。 EasyMock 在 setUp() 中调用 bMock.add(101L) 时抛出错误,因此它直接转到 tearDown 也失败了并隐藏 setUp() 的异常。

关于java - 验证完成后,EasyMock 在 tearDown 方法中验证对 mock 的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57413783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com