mockito返回不同的值

polkgigr  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(442)

所以我有这样的测试:

public class TimesheetServiceTest {
    @Mock
    Repository repository;
    @Mock
    ServiceToMockResult serviceToMockResult;
    @InjectMocks
    private ServiceToTest serviceToTest = new ServiceToTestImpl();

    @Test
    public void testLongResult() {
        when(serviceToMockResult.getResult(any(String.class)))
                .thenReturn(20L); //it's supposed to always return 20L
        //8 items length result list
        List<Long> results = this.serviceToTest.getResults();
       //some more testing after ....
    }
}

如您所见,servicetomock.getresult()方法在servicetotest内部被调用。这样做之后,我得到了8个我期望的结果,但其中一些是值0,我还注意到它总是在列表中的位置5和7。值得注意的是,当我在test中直接调用servicetomock.getresult()而不通过其他类时,我得到了预期的结果。
预期结果
20, 20, 20, 20, 20, 20, 20, 20
实际结果
20, 20, 20, 20, 20, 0, 20, 0

ve7v8dk2

ve7v8dk21#

将mock注入bean/服务而不是创建它时,让它通过mock创建。在处理之前还要初始化mockito注解。
例子:

public class TimesheetServiceTest {
    @Mock
    Repository repository;
    @Mock
    ServiceToMockResult serviceToMockResult;

    // let mockito create the service. 
    @InjectMocks
    private ServiceToTest serviceToTest;

    @Test
    public void testLongResult() {
        // Init mocks
        MockitoAnnotations.initMocks(this);

        when(serviceToMockResult.getResult(any(String.class)))
                .thenReturn(20L);
        // This should work fine.

    }
}
bzzcjhmw

bzzcjhmw2#

参数匹配器 any(String.class) 匹配任何字符串,不包括空值。
请参阅argumentmatchers。任何文档: public static <T> T any(Class<T> type) 匹配给定类型的任何对象,不包括空值。
很可能是使用null参数调用servicetomockresult.getresult()。由于这样的调用没有存根,因此返回返回类型的默认值(即 0 为了 long )

相关问题