gpt4 book ai didi

java - 如何使用 Mockito 模拟 void 方法

转载 作者:行者123 更新时间:2023-12-01 19:38:41 31 4
gpt4 key购买 nike

如何模拟具有 void 返回类型的方法?

我实现了一个观察者模式,但我无法用 Mockito 模拟它,因为我不知道如何实现。

我试图在互联网上找到一个例子,但没有成功。

我的类(class)是这样的:

public class World {

List<Listener> listeners;

void addListener(Listener item) {
listeners.add(item);
}

void doAction(Action goal,Object obj) {
setState("i received");
goal.doAction(obj);
setState("i finished");
}

private string state;
//setter getter state
}

public class WorldTest implements Listener {

@Test public void word{
World w= mock(World.class);
w.addListener(this);
...
...

}
}

interface Listener {
void doAction();
}

系统未通过mock触发。

我想显示上述系统状态。并据此作出断言。

最佳答案

看看 Mockito API docs 。正如链接文档提到的(第 12 点),您可以使用任何 doThrow()doAnswer()doNothing()doReturn() 从 Mockito 框架到模拟 void 方法的一系列方法。

例如,

Mockito.doThrow(new Exception()).when(instance).methodName();

或者如果您想将其与后续行为结合起来,

Mockito.doThrow(new Exception()).doNothing().when(instance).methodName();

假设您正在考虑模拟 World 类中的 setter setState(String s),下面的代码使用 doAnswer 方法来模拟 setState.

World mockWorld = mock(World.class); 
doAnswer(new Answer<Void>() {
public Void answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
System.out.println("called with arguments: " + Arrays.toString(args));
return null;
}
}).when(mockWorld).setState(anyString());

关于java - 如何使用 Mockito 模拟 void 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59190187/

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