2017-02-21 28 views
4

私はAvailability.javaというクラスがあり、2つのメソッドがあります。Mockito - 内部メソッド呼び出し

public Long getStockLevelStage() { 
    //some logic 
     getStockLevelLimit(); 
    } 

    public Long getStockLevelLimit() { 
     String primaryOnlineArea = classificationFeatureHelper.getFirstFeatureName(productModel, FEATURE_CODE_PRODUCT_ONLINE_AREA_PRIMARY, language); 
................ 
     return new Long(); 
    } 

私はユニットテストクラスAvailabilityTest.javaを書いています。

@RunWith(MockitoJUnitRunner.class) 
public class AvailabilityTest { 
    @InjectMocks 
    private Availability availability = new Availability(); 

    @Test 
    public void testGetStockLevelStage() { 
    availability.getStockLevelStage(); 
    } 
} 

私はavailability.getStockLevelStage()メソッドを呼び出すと、それはgetStockLevelLimit()メソッドを呼び出します。内部メソッド呼び出しを模擬することは可能ですか?

この場合、getStockLevelStage()が実行されると、getStockLevelLimit()は実行されません。

助けてください。

答えて

4

getStockLevelLimit()場合、それはあなたがテスト対象のクラスをモックとしたいいくつかの方法を意味します。
これを行うと、テストされた動作の関連性と信頼性が低下します。

テスト済みのクラスの内部メソッドではなく、依存関係をモックする必要があります。
getStockLevelLimit()を実行したくないと思われるのは、分離する外部依存関係などを使用しているためです。
getStockLevelLimit()の後ろにあり、それがAvailabilityクラスの直接の一部になっていないものを模擬して分離する必要があります。

+0

私が正しく理解していれば、私たちは内部メソッド呼び出しを模擬することはできません。 tatは正しいですか? – user2057006

+0

あなたはテストを完了するための方法がない場合にのみ実行してください。コードは、自然にテストできるように設計する必要があります。テスト対象のインスタンスのプライベートメソッドをモックすることはすべて自然です。 – davidxxx

+0

私はgetStocklevelLimit()メソッドを別のクラスに移動して、それをモックすることはできません。他の同僚によって書かれた現在のコードにはいくつかの制限があります。あなたが言ったように、それを行う方法があります。私が投稿した私の現在のコードでお勧めしますか? – user2057006

3

これを試してください:あなたのテスト中に実行されるようにしていない

@RunWith(MockitoJUnitRunner.class) 
public class AvailabilityTest { 
    @InjectMocks 
    @Spy 
    private Availability availability = new Availability(); 

    @Test 
    public void testGetStockLevelStage() { 
     Mockito.doReturn(expectedLong).when(availability).getStockLevelLimit(); 
     availability.getStockLevelStage(); 
    } 
} 
+0

私は空白のメソッドだけのために働いていると感じています。私のgetStockLevelLimit()メソッドはLongを返します。 voidメソッドだけがdoNothing()! doNothing()の正しい使用例: doNothing()。 doThrow(新しいRuntimeException()) .when(モック).someVoidMethod(); 上記の意味: someVoidMethod()は最初は何もしませんが、2回目の例外をスローします – user2057006

+0

正しい。doReturnを使用する必要があります。最近、多くのテストに申し訳ありません。この例に100%注目しませんでした –

+0

問題ありません。ご回答ありがとう – user2057006

関連する問題