2

イントロスペクションを使用するコード ブロックの単体テストを作成しています。具体的にはgetDeclaredField()、モックしたいクラスを呼び出して、フィールドの値を取得しようとします。これをMockitoでモックする方法はありますか?

4

1 に答える 1

1

Mockito は、モックを作成してだまそうとしているのと同じイントロスペクション ライブラリを使用して動作します。たとえあなたがそれを機能させることができたとしても、理解や維持がどれほど簡単かはわかりません.

非常に小さなネストされたクラスを作成し、通常どおりに操作することをお勧めします。

public class YourTest {
  private static class SampleClass {
    String field1;
    int field2;
  }

  @Test public void introspectionWorks() {
    yourSUT.process(new SampleClass());
  }
}

それを除けば、モックするのが難しい呼び出しを、簡単にスタブできるメソッドに抽出します。

public class YourSUT {
  /* ... */

  /* package */ Class<?> getFieldType(Object object, String fieldName) {
    return object.getClass().getDeclaredField(fieldName).getType();
  }
}

public class YourTest {
  @Test public void introspectionWorks() {
    YourSUT spy = Mockito.spy(yourSUT);
    doReturn(String.class).when(spy).getFieldType(myObject, "someStringField");
  }
}
于 2013-04-27T03:40:02.593 に答える