私はテスト対象のクラスの通常の実行に期待される値を返すように、私のテストクラスの@Before
/setUp()
メソッドのJMockit NonStrictExcpection()
で嘲笑しているオブジェクトを持っています。JMockitで以前に定義された期待値を削除する
これは、このコードの非正常な動作をテストしたい単一のテストのために保存したすべてのテストメソッドで問題ありません。
私は、setUpメソッドの期待値をオーバーライドすると思われるテストメソッドで新しい期待値を作成しようとしましたが、setUpメソッドの期待値が新しい期待値を抑制していることがわかりました。
私がsetUp期待値を削除すると、テストメソッドは期待どおりに動作しますが、私の他のテストはすべて失敗します。
最小限のコードでテストごとに正しく定義されるように、テストクラスをどのようにコードする必要がありますか?(私はそれぞれのテストメソッドに期待値コードをコピー/ペーストすることができると知っていますが、はやりたくありませんが、これは避けたい場合はです)。
私のテストコードは次のようなものになります(注、これはみかん擬似コードで、コンパイルされませんが、あなたのアイデアを得る):
public class TestClass{
@Before
public void setUp(){
// Here I define the normal behaviour of mockObject
new NonStrictExpectations() {{
mockObject.doSomething();
result = "Everyting is OK!";
}};
// Other set up stuff...
}
// Other Tests...
/**
* This method tests that an error when calling
* mockObject.doSomething() is handled correctly.
*/
@Test(expected=Exception.class)
public void testMockObjectThrowsException(){
// This Expectation is apparently ignored...
new NonStrictExpectations() {{
mockObject.doSomething();
result = "Something is wrong!";
}};
// Rest of test method...
}
}
これは手動ですべての単一のテストメソッドにexpectTheUnknown()を呼び出す必要があることを意味しませんか?また、私は 'NonStrictExpectations'を返すことは本当に必要ではないと思います。 –
@IbrahimArief私は答えを書いてからしばらくしていましたが、AFAIRは、OP質問のポイントは、メソッドが呼び出されたときのより細かい制御が必要であったということでした。私はこの解決策がハックだという疑いはないと思っていますが、少なくともそれは働いています:) – Steen
ああ、それは美しく、それについては間違いなく動作します。 :)もっと一般的なケースをオーバーライドする特別な期待を持っているのではなく、Jmockitの各メソッドにexpectTheUnknown()定義を広めることが他の方法ではないようだという私の心配を確認していました。 –