2016-06-22 2 views
0

私はValidatorServiceをユニットテストでSubscriptionInterceptorにしようとしています。インターセプターは嘲笑バリのvalidateSubscriptionメソッドを呼び出すときモキト時/時には反応しない

validator = Mockito.mock(ValidatorService.class); 
Mockito.when(validator.validateSubscription(any(), any(), any())).thenReturn(""); 
interceptor = new SubscriptionInterceptor(validator); 

後で、実際のクラスのインスタンスはなくモックよりも、呼び出されます。どうして?空のStringを返すメソッド呼び出しを取得するにはどうすればよいですか?

+1

返される空の文字列に特別な処理を行う必要はありません。これは、Mockitoがメソッドをスタブできる限り、デフォルトの戻り値です。このメソッドは、ここではできないようです。 ValidatorServiceとvalidateSubscriptionの両方がpublicで非finalであることを確認できますか? –

+0

メソッドがfinal宣言されました。それは今働きます、ありがとう! –

答えて

1

はコメントで解決:

方法は、最終的に宣言されました。

Mockitoは、それぞれのメソッドがオーバーライドされた、問題のクラスのプロキシ(サブクラス)を提供することによって機能します。しかし、finalのクラスとメソッドでは、Javaは呼び出しが必要な実装を検出できると想定し、動的メソッドの参照をスキップします。このため、Mockitoはfinalメソッド、staticメソッド、またはfinalクラスのメソッドの振る舞いをオーバーライドすることはできません。また、モックと対話していないため、警告もできません。

これは非常に一般的な問題です。メソッドのスタブ/検証のためにMockitoが機能していない場合は、finalフィールドを確認してください。

関連する問題