Java 带有布尔返回方法的Mockito Junit
版本信息:Java 带有布尔返回方法的Mockito Junit,java,junit,mockito,Java,Junit,Mockito,版本信息: junit : 5.2.0 Mockito : 2.23.4 我有以下方法: public class MyServiceImpl implements MyService { @Autowired private SomeService someService; public boolean getData(String Id, String version, String code) { RequestObj req = new
junit : 5.2.0
Mockito : 2.23.4
我有以下方法:
public class MyServiceImpl implements MyService {
@Autowired
private SomeService someService;
public boolean getData(String Id, String version, String code) {
RequestObj req = new RequestObj();
req.setId(Id);
req.setVersion(version);
req.setCode(code);
ResponseObj resp = someService.find(req);
if(resp.getValue()){
return true;
else
return false;
}
}
现在,我正在使用Mockito编写junit测试用例,如下所示:
@RunWith(MockitoJUnitRunner.class)
public class MyServiceImplTest {
@InjectMocks
MyServiceImpl myServiceImpl;
@Mock
SomeService someService;
@Test
public void testGetData() {
ResponseObj resp = new ResponseObj();
resp.setValue(true);
when(someService.find(Mockito.any())).thenReturn(resp);
assertTrue(myServiceImpl.getData("01", "5.0", "abc"));
}
}
我遇到了如下错误:
org.mockito.exceptions.misusing.UnnecessaryStubbingException:
Unnecessary stubbings detected in test class
当我使用resp对象时,错误不再是:
@Test
public void testGetData() {
ResponseObj resp = new ResponseObj();
resp.setValue(true);
Request req = new Request();
req.setId(Id);
req.setVersion(version);
req.setCode(code);
Mockito.when(someService.find(Mockito.any())).thenReturn(resp);
assertEquals(resp, someService.find(req));
assertTrue(myServiceImpl.getData("01", "5.0", "abc"));
}
我对莫基托和朱尼特是新手。我知道我不能正确地编写测试方法。请帮助修复我的测试用例。使用mockito 3.3.3进行了测试,并按预期工作。因此,请将您的mockito版本和SomeService类添加到问题中。如果根本没有调用您在模拟时使用的方法,则会引发异常。您可以尝试将Mock设置为@Mock(lenient=true)(不建议仅用于调试)。这将禁用此类错误。然而,当它真的没有被调用时,在宽松的更改之后,断言应该为false。@mszalbach:添加了版本信息。我也更新了工作场景。你能检查一下吗。似乎如果我们不使用存根,它就会忽略调用
@Mock(lenient=true)
是一种解决方案,可以正常工作。然而,你在我的测试用例中看到了什么错误吗?测试用例是正确的。这个问题是基于Mockio版本或与其他依赖项(如PowerMock)的冲突,或是我无法分辨的特殊编译器。为了了解更多信息,我需要一个maven或gradle中的示例项目来重现这个错误。如果我只是复制代码并创建一个示例,它就可以工作了。