前言
针对同一方法多次被调用且不同入参需要Spy
不同出参的情况,可以使用Answer
。本篇文章将对Answer
的使用进行说明。关于使用PowerMock
需要引入哪些依赖,请参考PowerMock使用-依赖准备。
前言
被测试类如下所示。
public class AnswerHelp {
public String convert(int num) {
return StringUtils.EMPTY;
}
}
测试类如下所示。
@RunWith(PowerMockRunner.class)
@PrepareForTest(AnswerHelp.class)
public class PowerMockTest {
@Test
public void answer() {
AnswerHelp answerHelp = PowerMockito.spy(new AnswerHelp());
Answer<String> answer = new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) {
int num = (Integer) invocation.getArguments()[0];
if (num == 0) {
return "zero";
} else if (num == 1) {
return "one";
}
return StringUtils.EMPTY;
}
};
PowerMockito.doAnswer(answer).when(answerHelp).convert(anyInt());
assertThat(answerHelp.convert(0), is("zero"));
assertThat(answerHelp.convert(1), is("one"));
}
@Test
public void given_when_then_bdd() {
AnswerHelp answerHelp = PowerMockito.spy(new AnswerHelp());
Answer<String> answer = new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) {
int num = (Integer) invocation.getArguments()[0];
if (num == 0) {
return "zero";
} else if (num == 1) {
return "one";
}
return StringUtils.EMPTY;
}
};
given(answerHelp.convert(anyInt())).willAnswer(answer);
assertThat(answerHelp.convert(0), is("zero"));
assertThat(answerHelp.convert(1), is("one"));
}
}