2016-07-22 27 views
1

春のセキュリティクラスにモックを注入することができますが、私は私のユニットテストから、それにモックオブジェクトを注入する必要があります。は、どのように私は</p> <pre><code>@PreAuthorize("(@assessmentAuthService.canViewAssessment(#id))") </code></pre> <p>AssessmentAuthServiceがスプリングによって自動的に作成されたWebリクエストを確保するために@PreAuthorizeを使用しています

private final AssessmentService assessmentService; 

@Inject 
public AssessmentAuthorizationServiceImpl(AssessmentService assessmentService) { 
    this.assessmentService = assessmentService; 
} 

私はassessmentService.getById(assessmentId)は嘲笑オブジェクトを返すようにしたいからです。 は、私はすでにこれでそれを設定しようとしたが、それは動作しません:私はReflectionTestUtils.setFieldとAssessmentAuthorizationServiceにモックを注入しようとしていたが、私は実現しなかった

ReflectionTestUtils.setField(assessmentAuthorizationService, 
          "assessmentService", mockAssessmentService); 
+0

ユニットテストはどのように見えますか? – dunni

+0

これは、mockitoのようなものとやりやすくなります。どのような模擬フレームワークを使用しているのですか?これまでに何を試しましたか? –

答えて

0

春の豆がプロキシです。フィールドを設定する前に、このメソッドを使用してプロキシのラップを解除する必要がありました。

class TestUtils { 

    ... 

public static Object unwrapService(Object service) throws Exception { 
    final boolean aopProxy = AopUtils.isAopProxy(service); 
    final boolean instanceCheck = service instanceof Advised; 
    if (aopProxy && instanceCheck) { 
    Object target = ((Advised) service).getTargetSource().getTarget(); 
    return target; 
    } 
return null; 
} 
} 

これを実行した後、それは機能しました。フィールドをモックに設定し、私が望む動作を定義することができました。

ReflectionTestUtils.setField(TestUtil.unwrapService(assessmentAuthorizationService), 
          "assessmentService", mockAssessmentService); 
when(mockAssessmentService.getById(eq(2L))).thenReturn(Optional.of(assessment)); 
関連する問題

 関連する問題