でユニットテストでは、親クラスのメソッドを無視します。私はこの方法を無視するか、それをスタブしたいです。私は、以下のより少ないをしようとしている: 私は、私がテストをしてみてください次のクラス持っmockito
public class TestClassA{
@Mock
ClassB instanceB;
public String testTheMethodToBeTested{
doNothing().when(instanceB).methodB();
ClassA instanceA = new ClassA();
String result = instanceA.methodToBeTested();
String expected = "foo"
assertTrue(result.equals(expected));
}
...
}
は、しかし、私は
methodB
はまだ実行されていることがわかります。しかし、
ClassA
では、classB変数を宣言してsetterを宣言すると、
methodB()
の代わりに
classB.methodB()
と書くと、テストが実行されます。しかし、私はテストされるコードを変更しないように頼まれています。
ClassA
をテストする方法はありますか?
あなたは 'ClassB'のモックを作成し、次に' ClassA'のインスタンスを作成します...なぜあなたは 'ClassB'のモックが' ClassA'のインスタンスと関係があると思いますか? 'ClassA'と' doNothing()。when(instanceA).methodB(); 'を使ってスパイを作成するだけです。 – Tom
私は単体テストとJavaに非常に新しいので、私は絶望のために何も奇跡を期待しませんでした。あなたがお勧めしたことを試してみましょう。どうもありがとう。 – newzad
ヒント:あなたのコードは、継承よりも構成を好むべきであると多くの人々が主張している良い例です。あなたのクラスAが(それを拡張するのではなく)Bを含んでいたら、依存関係注入を使用してテスト用に擬似BオブジェクトをAに挿入することができ、Spyビジネスに入る必要はありません。私はあなたのデザインが本質的に間違っていると言っているわけではありません。しかし、おそらくあなたの同僚とそれを見直す価値があります。 – GhostCat