2017-02-01 6 views
0

ユニットテストを書くために必要な次のクラスがあります。 MyClass自身のメソッドの呼び出しを単独で検証する必要があります。JMockit:テスト対象オブジェクトの自己メソッド呼び出しを確認する

public class MyClass { 
    public void init() { 
    } 

    public void testMethod() { 
    } 
} 

私はinit()testMethod()を呼び出すことはありません、それは見ることができるようにMyClass

public class MyClassTest { 
    @Tested 
    MyClass myClass; 

    @Test 
    public void initTest() { 
//  new Expectations(myClass) {{ 
//  }}; 
     myClass.init(); 
     new Verifications() {{ 
      myClass.testMethod(); 
     }}; 
    } 
} 

をテストするには、次のテストクラスを書いたが、私の驚きのために、上記のテストケースが成功しました。

上記の空のExpectationsブロックのコメントを外して部分的にmyClassを偽装すると、テストはMissing invocationというエラーで失敗します。だから、私はテストされたオブジェクトを部分的に模倣する必要があるようです。

しかし、複雑なクラスのテストオブジェクトを部分的に疑似テストすると、テスト時にさまざまな例外がスローされます。この状況では、Intellij IDEAのブレークポイントは機能しません。

ここで何が問題になるのでしょうか?または、テスト対象オブジェクト自体のメソッドの呼び出しを検証することは想定されていませんか?

答えて

0

JMockitは非模倣クラスのメソッド呼び出しを確認できません。あなたの例では、コメントアウトされたExpectationsの例では、myClassオブジェクトはまったく嘲笑されておらず、検証では実際にそのメソッドが呼び出されたことを実際に検証できません。厳密に言えば、@Testedオブジェクトを検証しているためではありません。新しいListを作成し、そのメソッドの1つをVerificationsに入れてみた場合、同じ問題が発生します。

+0

ここで、「複雑なクラスのテストオブジェクトを部分的に嘲笑してテストするときにさまざまな例外を投げる」という例を挙げることができれば、それは私の経験ではないので見てみると面白いでしょう。 – dcsohl

関連する問題