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中的示例项目来重现这个错误。如果我只是复制代码并创建一个示例,它就可以工作了。