Junit 忽略方法模拟

Junit ignore method mocking

我在现有 class 中创建了一个 Junit 测试用例,我想忽略一些模拟

@InjectMock
private HomeService homeService;

@Mock
private HomeUtility homeUtility;

@Test
public void testIsFilterWorkedTrue() {

    homeService.getData();
}

HomeService.java

class HomeService {

    @Autowired
    private HomeUtility homeUtility;
    
    public [RETURN_TYPE] getData() {

        // call mocked method
        output = mockedMethodcall();

        test = homeUtility.callMethod(output);
        return test;
    }
}

在上面的代码中,对于 homeUtility.callMethod(output);,我不希望它被模拟,应该进入方法内部。我必须使用

@Mock
private HomeUtility homeUtility;

因为它也被用于其他方法。我怎么能忽略它

您可以使用 thenCallRealMethod 来确保为该对象调用实际方法。

@InjectMock
private HomeService homeService;

@Mock
private HomeUtility homeUtility;

@Test
public void testIsFilterWorkedTrue() {
    when( homeUtility.callMethod(anyString()).thenCallRealMethod() )
    homeService.getData();
}

您也可以为此使用 spy。更多阅读:https://www.javabullets.com/mockito-partial-mocks-mock-and-spy/