Mockitoスパイ-内部クラスメソッドを呼び出すとき、スパイオブジェクトのメソッドをスパイしない

ヨナタンレビン:

次のような内部クラスを持つクラスがあります:

public class ClassWithInnerObject {

  private final InnerObject innerObject;

  public ClassWithInnerObject() {
    innerObject = new InnerObject();
  }

  public void callInnerObjectMethod() {
    innerObject.outerFunc();
  }

  public void outerFunc() {
    innerFunc();
  }

  public void innerFunc() {
    Log.d("XXX", "innerFunc: called");
  }

  public class InnerObject {
    public void outerFunc() {
      innerFunc();
    }
  }
}

そして、mockitoテストは次のようになります:build.gradle:

  androidTestCompile 'junit:junit:4.12'
  androidTestCompile 'org.mockito:mockito-core:1.10.19'

  androidTestCompile 'com.crittercism.dexmaker:dexmaker:1.4'
  androidTestCompile 'com.crittercism.dexmaker:dexmaker-mockito:1.4'
  androidTestCompile 'com.crittercism.dexmaker:dexmaker-dx:1.4'

テスト:

@RunWith(AndroidJUnit4.class) public class SpyVerifyTest {

  @Test public void myInnerTestWorking() {
    ClassWithInnerObject p = new ClassWithInnerObject();
    ClassWithInnerObject spy = Mockito.spy(p);
    spy.outerFunc();
    verify(spy, times(1)).innerFunc();
  }


  @Test public void myInnerTestNotWorking() {
    ClassWithInnerObject p = new ClassWithInnerObject();
    ClassWithInnerObject spy = Mockito.spy(p);
    spy.callInnerObjectMethod();
    verify(spy, times(1)).innerFunc();
  }

}

最初のテストは期待どおりに機能しています。2つ目innerFuncは、ログでは確認されていますが、「呼び出された」ものとして検出されることはありません。何が問題なのですか?:)

ありがとう!

ニコラ・フィロット:

なにが問題ですか?

さて、ここでの問題は非常に微妙です。を呼び出すとMockito.spy(p)mockitoインスタンスのClassWithInnerObjectすべてのメソッド呼び出しを監視できるようにするために、インスタンスの背後にある種のデコレータが作成されます。そのおかげで、特定のメソッドが呼び出され回数を確認できますが、デコレータではインスタンスでは確認できません。そして、ここでは、内部クラスを使用すると、デコレータinnerFunc()ではClassWithInnerObjectないインスタンスMockito innerFunc() が呼び出されるため、for は呼び出さていません

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Mockito-実際のオブジェクトをスパイして元のメソッドを呼び出す

分類Dev

スーパータイプメソッドを呼び出すと、新しいスーパータイプオブジェクトが作成されますか?

分類Dev

オブジェクトのメソッドのリストを順番に呼び出し、メソッドをパイプしますか?

分類Dev

オブジェクトがサブクラス タイプの場合、スーパークラスからサブクラスのパブリック メソッドを呼び出せないのはなぜですか?

分類Dev

同じインスタンスでデリゲートメソッドを呼び出すときに、オブジェクトのインスタンスをパラメーターとして渡すことを避けますか?

分類Dev

2番目のスレッドデザインパターンからメインスレッドオブジェクトメソッドを呼び出す

分類Dev

Mockitoでスパイされたオブジェクトの条件で実際のメソッドを呼び出す方法は?

分類Dev

オブジェクトインスタンスを介したクラスメソッドの呼び出し

分類Dev

内部委任をカウントせずにすべてのmockitoスパイクラスメソッド呼び出しをキャプチャする方法

分類Dev

Mockitoはスパイされたオブジェクトメソッドの戻りを確認します

分類Dev

ストリームパイプライン内の別のオブジェクトのメソッドを呼び出す

分類Dev

メソッドをオーバーライドしながらスーパークラスのメソッドを呼び出す目的は何ですか?

分類Dev

mockitoを使用して配列要素をスパイすると、メソッドが呼び出されたときに必要なのに呼び出されない

分類Dev

別のクラスjavaからオブジェクトとしてパラメータを使用してメソッドを呼び出す方法は?

分類Dev

Mockito Stubbed Spyは、スパイされたオブジェクトメソッドを呼び出す場合と呼び出さない場合があります

分類Dev

オーバーライドされたメソッド内の匿名の内部クラス内からスーパーメソッドを呼び出す

分類Dev

内部メソッド参照を持つクラスをスパイするMockito

分類Dev

プラグインリファレンスを使用して外部でjQueryウィジェットのパブリックメソッドを呼び出す方法

分類Dev

静的クラス メソッドは、クラスの外部で呼び出されるとオブジェクトを返しますが、異なるクラスの内部で呼び出されると空のオブジェクトを返します。

分類Dev

Java:内部のインプレースクラスからスーパーメソッドを呼び出す方法

分類Dev

メインメソッドでスーパークラスを呼び出す

分類Dev

java.lang.NullPointerException:他のクラスおよびメソッドのインスタンスを取得しているときに、nullオブジェクト参照で仮想メソッドを呼び出そうとしました

分類Dev

オブジェクトクラスのメソッドを呼び出すときのattributeError

分類Dev

他のクラスからメソッドが呼び出されたときに、メソッドオブジェクトへの参照を取得します(javascript)

分類Dev

メソッド内のパブリックオブジェクトをインスタンス化します

分類Dev

JUnitテストでメソッドのメソッドパラメータとして渡されるオブジェクトのメソッド呼び出しをモックする方法

分類Dev

オブジェクトの実際のタイプのパブリックメソッドを呼び出す

分類Dev

非表示の(ただしパブリック)メソッドをオーバーライドして、そのスーパーメソッドを呼び出すことはできますか?

分類Dev

オブジェクトのすべてのインスタンスでメソッドを呼び出す

Related 関連記事

  1. 1

    Mockito-実際のオブジェクトをスパイして元のメソッドを呼び出す

  2. 2

    スーパータイプメソッドを呼び出すと、新しいスーパータイプオブジェクトが作成されますか?

  3. 3

    オブジェクトのメソッドのリストを順番に呼び出し、メソッドをパイプしますか?

  4. 4

    オブジェクトがサブクラス タイプの場合、スーパークラスからサブクラスのパブリック メソッドを呼び出せないのはなぜですか?

  5. 5

    同じインスタンスでデリゲートメソッドを呼び出すときに、オブジェクトのインスタンスをパラメーターとして渡すことを避けますか?

  6. 6

    2番目のスレッドデザインパターンからメインスレッドオブジェクトメソッドを呼び出す

  7. 7

    Mockitoでスパイされたオブジェクトの条件で実際のメソッドを呼び出す方法は?

  8. 8

    オブジェクトインスタンスを介したクラスメソッドの呼び出し

  9. 9

    内部委任をカウントせずにすべてのmockitoスパイクラスメソッド呼び出しをキャプチャする方法

  10. 10

    Mockitoはスパイされたオブジェクトメソッドの戻りを確認します

  11. 11

    ストリームパイプライン内の別のオブジェクトのメソッドを呼び出す

  12. 12

    メソッドをオーバーライドしながらスーパークラスのメソッドを呼び出す目的は何ですか?

  13. 13

    mockitoを使用して配列要素をスパイすると、メソッドが呼び出されたときに必要なのに呼び出されない

  14. 14

    別のクラスjavaからオブジェクトとしてパラメータを使用してメソッドを呼び出す方法は?

  15. 15

    Mockito Stubbed Spyは、スパイされたオブジェクトメソッドを呼び出す場合と呼び出さない場合があります

  16. 16

    オーバーライドされたメソッド内の匿名の内部クラス内からスーパーメソッドを呼び出す

  17. 17

    内部メソッド参照を持つクラスをスパイするMockito

  18. 18

    プラグインリファレンスを使用して外部でjQueryウィジェットのパブリックメソッドを呼び出す方法

  19. 19

    静的クラス メソッドは、クラスの外部で呼び出されるとオブジェクトを返しますが、異なるクラスの内部で呼び出されると空のオブジェクトを返します。

  20. 20

    Java:内部のインプレースクラスからスーパーメソッドを呼び出す方法

  21. 21

    メインメソッドでスーパークラスを呼び出す

  22. 22

    java.lang.NullPointerException:他のクラスおよびメソッドのインスタンスを取得しているときに、nullオブジェクト参照で仮想メソッドを呼び出そうとしました

  23. 23

    オブジェクトクラスのメソッドを呼び出すときのattributeError

  24. 24

    他のクラスからメソッドが呼び出されたときに、メソッドオブジェクトへの参照を取得します(javascript)

  25. 25

    メソッド内のパブリックオブジェクトをインスタンス化します

  26. 26

    JUnitテストでメソッドのメソッドパラメータとして渡されるオブジェクトのメソッド呼び出しをモックする方法

  27. 27

    オブジェクトの実際のタイプのパブリックメソッドを呼び出す

  28. 28

    非表示の(ただしパブリック)メソッドをオーバーライドして、そのスーパーメソッドを呼び出すことはできますか?

  29. 29

    オブジェクトのすべてのインスタンスでメソッドを呼び出す

ホットタグ

アーカイブ