3

私は Mockito と PowerMock が初めてで、これを入手するのに本当に苦労しています。これは私が持っているほとんどの状況です:

class A {

  static class B {

    public class B(Object1 o1, Object2 o2) {
        setInSuperClass(o1); // this is private method...
        doSomethingWithInnerClass (new Object3() {

            @Override
            public void retreat() {
                someVar = new Object5(o2);   // someVar is from   superclass and is private, I know I can get it with PowerMock
            }

            @Override
            public boolean doSomething(){
                return true; 
            }

        })

    }
  }
}

これで最初のメソッドの仕事ができると思います....おそらく、一部のオブジェクトがスーパークラスに設定されており、nullではないことを確認することもできます。それで問題ありませんか?

    @Mock
    Object1 o1;

    @Mock
    Object2 o2;

    public void test() {
         B b = new B(o1, o2);
         PowerMockito.verifyPrivate(b).invoke("setInSuperClass", 1 , o1);
    }

しかし、doSomethingWithInnerClass を最適にテストする方法 ??? つまり、それが呼び出されたことを確認できることはわかっています....しかし、この匿名クラスの引数をテストしたいと思います。アドバイスありがとうございます、ありがとう

4

2 に答える 2

1

考え方を変える必要があると思います。たとえば、setInSuperClassPowermock を使用して が呼び出されたことを確認する代わりに、呼び出しの結果を確認する必要があります。設定されているフィールドはありますか?このフィールドにゲッターはありますか? このフィールドによって駆動される検証可能な他の動作はありますか?

についても同様ですdoSomethingWithInnerClass。何もしないメソッド呼び出しは、そこにないこともあります。呼び出しの結果が存在する必要があります。一部の出力、別のメソッド/クラスへの呼び出し、または副作用のいずれかです。結果を確認します。

これが本当に不可能な場合は、テスト用に内部クラスのサブクラスを作成する必要がある場合があります。このサブクラスは、テスト対象のメソッドによって呼び出されるメソッドをオーバーライドします。

于 2013-10-28T09:27:20.913 に答える