Mockito : doAnswer Vs thenReturn(Mockito:doAnswer Vs thenReturn)
问题描述
我正在使用 Mockito 进行后期单元测试.我对何时使用 doAnswer
和 thenReturn
感到困惑.
I am using Mockito for service later unit testing. I am confused when to use doAnswer
vs thenReturn
.
谁能帮我详细介绍一下?到目前为止,我已经用 thenReturn
进行了尝试.
Can anyone help me in detail? So far, I have tried it with thenReturn
.
推荐答案
当你在 mock 一个方法时知道返回值时,你应该使用 thenReturn
或 doReturn
称呼.调用模拟方法时会返回此定义的值.
You should use thenReturn
or doReturn
when you know the return value at the time you mock a method call. This defined value is returned when you invoke the mocked method.
thenReturn(T value)
设置调用方法时要返回的返回值.
thenReturn(T value)
Sets a return value to be returned when the method is called.
@Test
public void test_return() throws Exception {
Dummy dummy = mock(Dummy.class);
int returnValue = 5;
// choose your preferred way
when(dummy.stringLength("dummy")).thenReturn(returnValue);
doReturn(returnValue).when(dummy).stringLength("dummy");
}
Answer
用于在调用模拟方法时需要执行其他操作,例如当需要根据该方法调用的参数计算返回值时.
Answer
is used when you need to do additional actions when a mocked method is invoked, e.g. when you need to compute the return value based on the parameters of this method call.
当您想使用通用 Answer
存根 void 方法时,请使用 doAnswer()
.
Use
doAnswer()
when you want to stub a void method with genericAnswer
.
Answer 指定了一个执行的动作和一个在你与 mock 交互时返回的返回值.
Answer specifies an action that is executed and a return value that is returned when you interact with the mock.
@Test
public void test_answer() throws Exception {
Dummy dummy = mock(Dummy.class);
Answer<Integer> answer = new Answer<Integer>() {
public Integer answer(InvocationOnMock invocation) throws Throwable {
String string = invocation.getArgumentAt(0, String.class);
return string.length() * 2;
}
};
// choose your preferred way
when(dummy.stringLength("dummy")).thenAnswer(answer);
doAnswer(answer).when(dummy).stringLength("dummy");
}
这篇关于Mockito:doAnswer Vs thenReturn的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Mockito:doAnswer Vs thenReturn


- Eclipse 插件更新错误日志在哪里? 2022-01-01
- Spring Boot连接到使用仲裁器运行的MongoDB副本集 2022-01-01
- value & 是什么意思?0xff 在 Java 中做什么? 2022-01-01
- 将log4j 1.2配置转换为log4j 2配置 2022-01-01
- Java包名称中单词分隔符的约定是什么? 2022-01-01
- C++ 和 Java 进程之间的共享内存 2022-01-01
- 从 finally 块返回时 Java 的奇怪行为 2022-01-01
- 如何使用WebFilter实现授权头检查 2022-01-01
- Safepoint+stats 日志,输出 JDK12 中没有 vmop 操作 2022-01-01
- Jersey REST 客户端:发布多部分数据 2022-01-01