1

Mockito 1.9.x を使用して、Spring AOP ジョインポイントのアドバイス メソッドにある次のコードをモックしようとしています。

protected void check(ProceedingJoinPoint pjp) {
   final Signature signature = pjp.getSignature();
   if (signature instanceof MethodSignature) {
      final MethodSignature ms = (MethodSignature) signature;
      Method method = ms.getMethod();
      MyAnnotation anno = method.getAnnotation(MyAnnotation.class);
      if (anno != null) {
        .....
}

ここに私がこれまでにモックのために持っているものがあります

ProceedingJoinPoint pjp = mock(ProceedingJoinPoint.class);
Signature signature = mock(MethodSignature.class);
when(pjp.getSignature()).thenReturn(signature);

MethodSignature ms = mock(MethodSignature.class);
Method method = this.getClass().getMethod("fakeMethod");
when(ms.getMethod()).thenReturn(method);

....

最終クラスをモック/スパイできないため、テスト クラス内で fakeMethod() を使用して Method インスタンスを作成する必要があります。デバッガーを使用すると、「this.getClass().getMethod("fakeMethod");」を呼び出した後、メソッド インスタンスが良好であることがわかります。しかし、私のcheck()メソッド内では、「メソッドメソッド= ms.getMethod();」という行を実行した後、メソッドはnullです。これにより、次の行で NPE が発生します。

when().thenReturn() を使用すると、テスト ケースではメソッド オブジェクトが null ではなく、テストしているメソッドでは null になるのはなぜですか?

4

1 に答える 1

3

メソッドは、モックが追加された場所ではなく、signature返された byを使用しています。試す:pjp.getSignature()msMethodSignature

ProceedingJoinPoint pjp = mock(ProceedingJoinPoint.class);
MethodSignature signature = mock(MethodSignature.class);
when(pjp.getSignature()).thenReturn(signature);

Method method = this.getClass().getMethod("fakeMethod");
when(signature.getMethod()).thenReturn(method);
于 2012-11-06T21:54:58.037 に答える