gpt4 book ai didi

java - Mockito:方法的返回值取决于调用的其他方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:02:03 27 4
gpt4 key购买 nike

在我的单元测试中,我需要模拟一个接口(interface),在不同的方法中有 nextItem()isEmpty() 方法:

public interface MyQueue {
Item nextItem();
boolean isEmpty();
//other methods
...
}

我对模拟的要求是 isEmpty() 最初应该返回 false,但是在调用 nextItem() 之后 isEmpty() 应该返回真。因此,我正在用一个项目模拟一个队列。

  1. 用 mockito 实现这种模拟的最简单方法是什么?
  2. 我能否实现额外的要求:调用 nextItem() 第二次、第三次等等会导致特定类型的异常?

附言我不想为测试提供我的接口(interface)的完整实现,因为其中有其他方法,导致难以理解和冗长的代码。

最佳答案

您可以使用 thenAnswer() 来实现,Mockito 文档认为该功能存在争议:

另一个有争议的功能,最初没有包含在 Mockito 中。我们建议仅使用带有 toReturn() 或 toThrow() 的简单 stub 。这两个应该足以测试/测试驱动任何干净简单的代码。

这是当时的答案:

private boolean called = false;

when(mock.nextItem()).thenAnswer(new Answer() {
Object answer(InvocationOnMock invocation) {
called = true;
return item;
}
when(mock.isEmpty()).thenAnswer(new Answer() {
Object answer(InvocationOnMock invocation) {
return called;
}
});

关于java - Mockito:方法的返回值取决于调用的其他方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12656479/

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