我对Mockito很陌生。我想为下面的方法编写一个mock。我该怎么写?我的模拟方法会是什么样子?
public boolean validatePersonForBenefitsProcessing(PersonDTO person) {
boolean continueProcessing = false;
if (person.isPersonOnLeave()) {
if (person.isBenefitsCoverage()) {
if (person.isPersonDriver()) {
continueProcessing = true;
} else {
if(person.isPersonOnSTD()) {
continueProcessing = false;
} else {
continueProcessing = true;
person.setSendPersonToInternal(true);
}
}
}
}
return continueProcessing;
}
问题是你这样做的目的是什么?
如果要测试这个方法(例如:为了提高覆盖率),可以创建PersondTo
的模拟,并通过声明方法调用的结果来定义它应该表现的行为。
一个示例可以如下所示:
public void test() {
PersonDTO personMock = mock(PersonDTO.class);
when(personMock.isPersonOnLeave()).thenReturn(true);
when(personMock.isBenefitsCoverage()).thenReturn(true);
when(personMock.isPersonOnSTD()).thenReturn(false);
Assert.assertTrue(validatePersonForBenefitsProcessing(personMock));
ArgumentCaptor<Boolean> captor = ArgumentCaptor.forClass(Boolean.class);
verify(personMock).setSendPersonToInternal(captor.capture());
Assert.assertTrue(captor.getValue());
}
SomeClass mock = mock(SomeClass.class);
when(mock.validatePersonForBenefitsProcessing(any(PersonDTO.class))).thenReturn(true);
SomeClass mock = mock(SomeClass.class);
when(mock.validatePersonForBenefitsProcessing(any(PersonDTO.class))).thenAnswer(new Answer<Boolean>() {
@Override
public Boolean answer(InvocationOnMock invocation) throws Throwable {
PersonDTO dto = (PersonDTO) invocation.getArgument(0);
dto.setSendPersonToInternal(true);
return true;
}
});
正如@chrylis
已经评论的那样,类似的行为可能会让其他开发人员感到惊讶,因此如果可能,应该避免。而且,它使测试变得更加容易;)
同样,正如@chrylis
所说,该方法中没有任何内容需要您进行这种模拟,因为您可以通过操作输入参数来自由地控制代码所采用的路径。
给定一个类Foo 为什么我用Spock来嘲笑Foo 调用总是返回false? 不确定这是否有区别,但测试是在Groovy/Spock中进行的,而Foo是在Java8中进行的。
如何模拟返回已强制转换的模拟对象的方法。 试验方法。
问题内容: 使用模拟编写单元测试时遇到问题。我需要模拟的对象有很多吸气剂,我确实在代码中称呼它们。但是,这些不是我的单元测试的目的。因此,有一种方法可以模拟所有方法,而不是一个个地模拟它们。 这是代码示例: 这是我需要测试的服务等级 在测试类中,测试方法就像 因此,有一种方法可以避免将所有无用的“ field1”的“ when”写入“ field20” 问题答案: 您可以控制模拟的默认答案。在创建
我在用Mock编写单元测试时遇到了一个问题。有一个对象,我需要模拟有很多getter,我在代码中调用它们。但是,这些不是我的单元测试的目的。所以,有没有一种方法我可以模拟所有的方法,而不是一个一个地模拟它们。 下面是代码示例: 那么,有没有一种方法可以避免为无用的“field1”到“field20”写所有的“when”
让我向您展示getCurrentWeatherWithForecastUsecase类actgually是什么样子: } //这很容易,它只需要一个天气存储库,并要求它获取结果。我把它发送回调用者,调用者将显示它。 更新: 以下是故障的整个堆栈跟踪:
有一个方法