2017-07-11 56 views
1

由於我是Mockito的新手,我想知道,我怎樣才能模擬一個類中的方法,實際上也是用@Mock註解的。@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); 
} 

我試圖用對HelpService@InjectMocks以及,通過增加someServiceTestProcessService@Mock,但它的Mockito不允許這樣。結果,它拋出了我NullPointerException。我如何解決這個問題?

+0

您需要使用PowerMocks嘲笑私人或本地方法 – pvpkiran

+0

你爲什麼要嘲笑的依賴的私有方法正在測試的課程? SomeService無法直接調用該方法..模擬Helpservice的公共方法,其中包含調用私有方法 –

+0

這意味着額外的庫。我也可以公開這個方法。但我不明白,我怎麼可以嘲笑它 – Omaja7

回答

0

@InjectMocks只應在被測試的類上使用。因爲它們沒有任何實現,所以向mocks注入依賴是沒有意義的。

如果你可以讓該方法公開如下,你可以嘲笑它:

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