2017-10-30 12 views
3

Mockito extension for JUnit 5を実装しています。ネストされたテストで、親テストクラスのモックを作成したいとします。JUnit 5ネストされたテストクラスから親テストのインスタンスを取得する方法

class RootTest{ 
    @Mock Foo mock; 

    @Nested 
    class NestedTest{ 
    @Test 
    public void foo(){ 
     mock.bar(); 
    } 
    } 
} 

我々は@Mockでアノテートフィールドにモックを割り当てるためにRootTestのインスタンスを必要とすることができません。 現在の問題は、RootTestクラスのインスタンスを取得することです。最初の試みはExtensionContext.getParent()ExtensionContext.getTestInstance()で取得することでしたが、テストインスタンスは親に対してnullです。

Q:ネストされたクラスの親インスタンスを取得するにはどうすればよいですか?リフレクションは助けになるかもしれませんが、オプションではなく、コンパイラに依存します。

答えて

3

外側のテストインスタンスにはExtensionContextでアクセスできません。ただし、拡張機能にTestInstancePostProcessorを実装させる場合は、外部テストインスタンスと内部テストインスタンスが呼び出されます。実際、インスタンス変数を設定することを意図しています(例については、sample Mockito extensionを参照してください)。

+0

mockito-strictnessを定義するために追加の注釈を処理するために 'BeforeEachCallback'を実装する必要があるので、コードはより複雑になりました。 'getTestInstance()'が将来のリリースで親の 'ExtensionContext'のテストインスタンスを返す可能性はありますか? – Chriss

+0

'ExtensionContext'の親はあなたの例ではネストされたテストクラスを表し、' Lifecycle.PER_CLASS'を使うとテストインスタンスがセットされます。しかし、その場合、必要なものではないネストされたクラスのインスタンスが含まれます。 'ExtensionContext'に別のメソッドを追加して、すべての囲まれたインスタンス、または指定されたクラスリテラルの囲むインスタンスを取得できます。 GitHubの問題を作成して、そこで議論を続けることができますか? –

関連する問題