2017-11-10 3 views
0

Das Problem ist, dass ich nicht in der Lage bin, diese Aspektklasse während des Komponententests zu verspotten, weil sie irgendwie in den Kontext injiziert wird, bevor ich mich darüber lustig mache.Wie AspectJ Klasse zu verspotten?

Beispiel-Code -

@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-Klasse -

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(); 
    } 
} 

Ich bin in der Lage erfolgreich diesen Aspekt zu verwenden. Das Problem liegt beim Unit-Testfall. Wie kann ich diese aspectj Klasse verspotten oder aspectj für Unit Testcase deaktivieren? Danke

Antwort

0

Sie brauchen keine Spott, wie Sie Spring-Framework AspectJProxyFactory Klasse nutzen können, um Ihren Aspekt zu testen. Hier ist ein einfaches Beispiel,

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

Danke, aber ich unten Fehler bekommen muss -Beratung innerhalb eines Aspektes Typ deklariert werden: Offending Methode – akku

+0

Ihre pointcut einen Fehler aufweist. Probieren Sie diese '@Around (" Ausführung (* com. *. *. * (..))) ")'. –

+0

Der im Beispiel angegebene Pointcut hat einen Tippfehler. Ich bin in der Lage, mit dem Pointcut zu laufen, aber der Unit Case schlägt fehl. Es ist ein Post für den obigen Fehler aufgetreten - https://stackoverflow.com/questions/31329009/unit-test-a-method-that-is-advised-by-around-advice. Ich benutzte MockitoJUnitRunner und ändere jetzt den Unit Case, um SpringJUnit4ClassRunner zu verwenden und Bean in meiner Testkonfiguration zu erstellen, aber die Bean wurde nicht erstellt. Ich bin neu und versuche es weiter. – akku

Verwandte Themen