私はこの質問を少し調べて、私が必要とするものを見つけられませんでした。私はJMockitと嘲笑についてもう少し学んだ。どっちがいい。誰もが何かが実行されたことを確認する方法を知りたいと思うようです。私はその反対を学びたいと思います。プライベートメソッドが実行されていないことを確認してください。JMockit
オクラホマ - パブリックメソッドであまりうれしくないパスを確認するテストを作成しています。テストされているメソッドはvoid
ですので、実際にはassert
の結果を得ることはできません。 私がしたいのは、メソッドがこのテストケースで実行されなかったことを確認することです。例えば
:私はテストケースの結果として取得しています何
class ClassToTest {
private void method(String arg){}
public void publicMethod(String arg0, String arg1){
if(false){
//this method should never get called.
method(arg0);
}
}
}
class TestingClass{
@Tested
private ClassToTest classToTest = new ClassToTest();
@Test
public void testCheckingIfPrivateMethodWasCalled(){
classToTest.publicMethod("string1", "string2");
new Verifications() {
{
//At this point I am trying something like
Deencapsulation.invoke(classToTest, "method", "string1");
times = 0; //Also tried maxTimes = 0;
//Through debug it looks like the invoke is doing what it's named...
//invoking the private method, I don't want to invoke.
//How do I check that ClassToTest#method was not called?
}
}
}
}
がjava.lang.IllegalStateException: Missing invocation to mocked type at this point; please make sure such invocations appear only after the declaration of a suitable mock field or parameter
です。 times = 0;
の行にあります。
私はinvoke
がプライベートメソッドを実行していることを知っています。私は、メソッドを呼び出す/実行することなくメソッドが呼び出されたことを「チェック」する方法を見つけ出そうと、頭を悩ませています。
ありがとうございました。 fakingのためのモックアップAPIでそれをやっているの
テストアプリケーションの状態。あなたのプライベートメソッドの呼び出しが重要な場合、それはどこかで影響を受けた状態になっているはずです。テストすることができるはずです。それを回避するには、テストで検証できるように、メソッドのデフォルトの可視性(パッケージ保護とも呼ばれます)を与えることを検討してください。 (あなたのテストは、あなたがテストしているクラスと同じパッケージになっていると仮定しています。これは合理的な仮定です) – nasukkin
*決して 'プライベート'メソッドをモックしないでください。考えてみましょう:プライベートメソッドは、品質を気にする開発者がいつでも作成またはインライン化できます。機能を保持したリファクタリングを通じて生産コードを改善しながら、実際に作業テストを修正する必要がありますか?気にしなくても、チーム内の他の開発者や今後の開発者を考慮してください。 –