5

リフレクションを使用して、テスト用にスタブしたいオブジェクトの隠しメソッドを呼び出すコードの単体テストを作成しようとしています。

methodUnderTest(Arg argument) {
  Method toCall = Arg.class.getMethod("toCall");
  Object val = toCall.invoke(argument);
  // Do stuff with val...
}

toCall() 呼び出しをスタブできるようにするこのメソッドに渡すことができるモック Arg を作成することは可能ですか?

Arg は私が作成しているオブジェクトではないため、そのメソッドのアクセシビリティを変更することはできません。

4

1 に答える 1

0

はい、リフレクションで呼び出されたメソッドをスタブできます。ただし、プライベート メソッドをスタブ化することはできません。mockito には構文がありません。また、最終メソッド、静的メソッド、フィールド、クラスをスタブ化することはできません。このようなハッキングには、powermockito が必要です。

しかし、あなたはそれを使うべきではありません。リファクタリング!methodUnderTest2 つ (または 3 つ) の方法に分割します。最も重要なものはObject val入力として取得され、ビジネス ロジックを実行します。その方法をテストする必要があります。

2 番目のメソッドは、呼び出す (そして最終的に呼び出す) メソッドとパラメーターを準備します。現在、この部分で静的フィールドにアクセスします。しないでください。可能な限り別の方法を使用してください(Colinが提案したように)。複雑なロジックがある場合は、そのロジックをテストしますが、テストinvokeメソッドがありません-動作します。sun/oracle の担当者はすでにテストしています

于 2013-09-22T13:35:15.590 に答える