2017-11-10 24 views
0

問題は、単体テストを実行している間にこのaspectjクラスを模擬することができないということです。なぜなら、私はそれを模擬する前に何らかの形でコンテキストに注入されているからです。AspectJクラスを模擬する方法は?

例コード -

@Aspect 
public class ExampleAspect { 

@Around ("execution * com.*.*.*(..)") 
public void printResult(ProceedingJoinPoint joinPoint) throws Throwable { 
     System.out.println("Before Method Execution"); 
     joinPoint.proceed(); 
     System.out.println("After Method Execution"); 
    } } 

Testクラス -

public class ClassATest 
{ 
    @Mock 
    private ExampleAspect mockExampleAspect; 

    private ClassA testClass; 

    @Before 
    public void setup() { 
     MockitoAnnotations.initMocks(this); 
     Mockito.doNothing().when(mockExampleAspect).printResult(anyList()); 
     testClass = new ClassA(); 
    } 

    @Test 
    public void test() { 
     // before and after methodA() is executed it is intercepted by the bean of ExampleAspect 
     testClass.methodA(); 
    } 
} 

私は正常にこの側面を使用することができています。問題は単体テストケースにあります。どのように私はこのaspectjクラスを模擬するか、unit testcaseのaspectjを無効にできますか?ありがとう

答えて

0

あなたはあなたの面をテストするためにSpringフレームワークのAspectJProxyFactoryクラスを利用できるので、モックは必要ありません。ここで

public class ClassATest { 

    private ClassA proxy; 

    @Before 
    public void setup() { 
     ClassA target = new ClassA(); 
     AspectJProxyFactory factory = new AspectJProxyFactory(target); 
     ExampleAspect aspect = new ExampleAspect(); 
     factory.addAspect(aspect); 
     proxy = factory.getProxy(); 
    } 

    @Test 
    public void test() { 
     proxy.methodA(); 
    } 
} 
+0

おかげで、簡単な例ですが、私は今-Adviceは、アスペクトタイプの中で宣言されなければならないエラーの下に取得する:あなたのポイントカットにエラーがある – akku

+0

方法を怒ら。この '@Around("実行(* com。*。*。*(*)*) ")'を試してください。 –

+0

この例で与えられたポイントカットには、タイプミスがあります。私はポイントカットを使用して実行することができますが、ユニットケースは失敗しています。上記のエラーのために1つの投稿に行きました - https://stackoverflow.com/questions/31329009/unit-test-a-method-that-is-advised-by-around-advice私はMockitoJUnitRunnerを使用していましたが、ユニットケースをSpringJUnit4ClassRunnerを使用して変更し、テスト設定でBeanを作成しましたが、Beanは作成されませんでした。私はこれに新しいとそれをさらに試しています。 – akku

関連する問題