2016-08-11 11 views
0
public class A { 
    public void methodOne(int argument) { 
     //some operations 
     B b = methodTwo(int argument); 

     // some operations based on b 
     // switch cases based on returned values of b 

    } 

    private void methodTwo(int argument) 
    DateTime dateTime = new DateTime(); 
    //use dateTime to perform some operations 
} 
+1

コメントはまだありません。常に質問を更新してください。 – GhostCat

答えて

0

あなたが本当にクラスBを模擬しなければならない場合は、次のようにあなたがそれを行うことができます(PowerMockを使用せず、代わりにJMockitライブラリー):ABを取得する方法

public class ExampleTest { 
    @Tested A a; 

    @Test 
    public void exampleTest(@Mocked B anyB) { 
     // Record calls to methods on B, if/as needed by code under test: 
     new Expectations() {{ anyB.doSomething(); result = "mock data"; }}; 

     // Exercise the code under test: 
     a.methodOne(123); 

     // Verify a call to some other method on B, if applicable: 
     new Verifications() {{ anyB.someOtherMethod(anyString, anyInt); }}; 
    } 
} 

(注)このテストは気にしません。よいテストが常にあるべきであるので、それはprivate methodTwoのような実装の詳細から独立しています。

0

理想的には、あなたはしません!

意味:あなたのmethodOne()は特定の値を返しています。したがって、可能であれば、ではなく、のテスト内部を使用することをお勧めします。

したがって、さまざまなパラメータでmethodOne()を呼び出すテストケースを記述する必要があります。そのメソッドから返された値が例外と一致することを宣言します。

合理的なテストを行うためにその "B"オブジェクトを制御する必要がある場合は、依存性注入を使用し、何らかの形でテスト対象のクラスにBオブジェクトを提供することです。それで、あなたは嘲笑されたBを作り、それをテスト中のあなたのクラスに渡すことができるからです。

他の言葉:テスト可能なコードを書く方法を学ぶ。例えば、これらを見て、videos。真剣に。その材料の各分はあなたの時間の価値があります。

+0

ありがとう..私はビデオを見る – mani

+0

クラス「A」から使用されるオブジェクト「B」を制御するための「*正しい*」方法はありません。依存性注入は他にもオプションであり、それぞれのオプションには独自のトレードオフがあります。 –

関連する問題