2016-09-10 4 views
-1

私のプログラムの単体テストを行っていますが、問題があります。関数Aが関数を呼び出すという状況をどのように処理するのか分かりません。関数Aをテストするつもりです。私は、スタブモジュールとして関数をシミュレートするスタブモジュールを作成すると言われています。しかし、私はちょうどJUnitによってこれを行う方法を知らない。例えば :単体テスト時に別の関数を呼び出す関数をテストするには?

public class compute 
{ 
    public int multiply(int a,int b) 
    { 
     return a*b; 
    } 
    public int cube(int a) 
    { 
     return(multiply(multiply(a,a),a); 
    } 
} 

ので、この場合には、機能cube()ためのテストコードを書くためにどのように?どのようにシミュレートするmultiply()

+0

私はこの場合、何かをスタブまたはモックする必要はないと主張します。 – Hulk

+0

あなたの助言をいただきありがとうございますが、スタブやモックが必要な状況や、この場合に必要でない理由はどうですか?私はスタブを使用しないので、関数multiply()にエラーが含まれている場合、どのようにしてバグを見つけることができますか? – HigginsWang

+0

multiply関数にバグがある場合、multiplyメソッド用に記述されたテストケースでそれを知ることになります。 –

答えて

0

おそらくここで何かを模倣する理由はありませんし、確かにあなたのキューブ()メソッドではそれは問題ではありません。しかし、必要に応じて、Mockitoのような模擬フレームワークを使用して部分模擬を作成する(つまり、クラスのいくつかのメソッドを模倣するが、他のメソッドを実際に呼び出す) 、または単純に乗算をオーバーライドするあなたがこの方法を模擬するために必死だった場合)など以下のように匿名クラスのメソッドあなたは*乗算にキューブ内のコードを変更する必要があるだろうが(a)の

@Test 
public void testCube(){ 
    compute c = createMock(9); 
    Assert.assertTrue(27, c.cube(3)); 
} 

public compute createMock(final int result){ 
    compute c = new compute(){ 
     @Override 
     public int multiply(int a, int b){ 
      return result; 
     } 
    }; 
} 
0

multiplyメソッドをシミュレートするためにここにスタブ/モックを作成する必要はありません。

通常は、別のオブジェクトでメソッドを呼び出すときに使用します。例えば、サービスクラスからあなたはdaoクラスを呼び出しています。次に、daoクラスをスタブ/モックします。 Alanが指摘したように、テスト中のクラスの特定の機能だけをスタブ/モックするために、モック/匿名の部分的なクラス/オーバーライドを常に持つことができます。

ここでは、キューブメソッドをそのままテストする必要があり、モックを乗算する必要はありません。

+0

クラスの各メソッドを個別にテストすることも有効な方法です。 –

+0

@AlanHayは私の声明に同意して訂正します。 –

0

、これを行うことができますこのクラスをサブクラス化し、そこに関連するメソッドの模擬実装を提供することによって、

これは、この場合、サードパーティのオブジェクトに本当に頼っているわけではないので、本当に必要ないと言いました。後で乗算メソッドを使用しないようにキューブの実装を変更する場合は、テストを書き直す必要があります。

関連する問題