2017-07-11 6 views
1

私はMockitoを初めて使用しているので、クラス内にメソッドをモックするにはどうすればいいですか?実際には@Mockという注釈も付けられています。@Mockクラスのモックフィールド

例:

@RunWith(MockitoJUnitRunner.class) 
public class someServiceTest { 

@InjectMocks 
private MainService mainService; 

@Mock 
private HelpService helpService; 

@Mock 
private SecondHelpService secondHelpService; 

MainServiceをテストするために使用される方法を含み、このhelpServiceクラスがあります。

@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); 
} 

私はsomeServiceTestProcessService@Mockを追加することで、同様HelpService@InjectMocksを使用しようとしましたが、Mockitoはそれを許可していません。その結果、私はNullPointerExceptionを投げます。どうすれば修正できますか?

+0

あなたがプライベートまたはローカルメソッド – pvpkiran

+0

を模擬するためにPowerMocksを使用する必要がありますテスト中のクラス? SomeServiceはそのメソッドを直接呼び出すことはできません。プライベートメソッドへの呼び出しを含むヘルプサービスのpublicメソッドを偽装します。 –

+0

これは余分なライブラリを意味します。メソッドを公開することもできます。しかし、私はそれを嘲笑する方法を理解していない – Omaja7

答えて

0

@InjectMocksは、テスト対象のクラスでのみ使用してください。依存関係を実装していないので、モックに依存関係を注入するのは意味がありません。

あなたがメソッドを公開することができた場合は、次のようにあなたはそれを模擬できます:あなたはの依存関係のプライベートメソッドをモックする理由

doReturn(true).when(helpService) 
       .checkSomething(Mockito.any(String.class), Mockito.any(Date.class)); 
関連する問題