TestNG テスト ケースで具象クラスをモックしたいと考えています。クラスは次のようになります (簡略化された例)。
public class Example() {
private MyHello myHello;
public Example(MyHello myHello) {
this.myHello = myHello;
}
public String doSomething() {
return myHello.doSomethingElse();
}
}
ここでExample
、定義された値をモックで返します。
@BeforeMethod
public void setUp() {
this.example = mock(Example.class);
when(this.example.doSomething()).thenReturn("dummyValue");
}
これは非常に良さそうに見えますが、実際にはそうではありません。setup メソッドの最後の行は、 のインスタンスでメソッドを呼び出しますExample
。このインスタンスはコンストラクターを介して取得しなかったためMyHello
、setUp メソッドで NPE を取得します。
モックの作成中に を注入する方法MyHello
、または Mockito が実際のインスタンスでメソッドを呼び出すことを禁止する方法はありますか?
編集
観察された動作の原因となった問題は、doSomething()
メソッドが実際にはfinal
. その問題を解決しようとしたとき、私はそれを見落としました。とにかく、これは mockito の既知の制限です。したがって、ファイナルを削除するか、そのクラスのインターフェイスを抽出します。