在@Mock类中模拟字段

时间:2017-07-11 08:58:35

标签: unit-testing mocking mockito

由于我是Mockito的新手,我想知道,如何在类中模拟一个方法,实际上也用@Mock注释。

示例:

@RunWith(MockitoJUnitRunner.class)
public class someServiceTest {

@InjectMocks
private MainService mainService;

@Mock
private HelpService helpService;

@Mock
private SecondHelpService secondHelpService;

现在有一个helpService类,其中包含一个方法,用于测试MainService

@Service
@Transactional(propagation = Propagation.SUPPORTS)
public class HelpService {

//  I want this method to be mocked
private boolean checkSomething(String name, date) {
    return ProcessService.checkIfJobHasRun(name, date);
}

我也尝试在@InjectMocks使用HelpService,在ProcessService中添加@Mock someServiceTest,但Mockito不允许这样做。结果,它引发了我NullPointerException。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

@InjectMocks只应在被测试的课程中使用。将依赖项注入到模拟中是没有意义的,因为它们没有任何实现。

如果您可以公开该方法,可以按如下方式进行模拟:

doReturn(true).when(helpService)
              .checkSomething(Mockito.any(String.class), Mockito.any(Date.class));