AspectJ les conseils de ne pas être exécutée par le biais de l'unité de test

Je suis perplexe. Je suis en train de tester un AspectJ classe. Mon Aspect classe est ramassé parfaitement quand je suis en cours d'exécution de mon application. Cependant, il me semble être incapable d'obtenir n'importe quel Aspect de la classe d'intercepter tout méthode à l'intérieur d'un test.

Je suis à l'aide de Printemps 3.2.2, AspectJ 1.7.2 et Maven 4.

Voici le test simple, je travaille avec:

Le Test AspectJ classe

package my.package.path.config;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Aspect
public class TestAOP {
    private String message;

    public TestAOP() {
    }

    @Pointcut("execution(* my.package.path.TestAOPClient.relayMessage(..))")
    public void aopPointcut() {
    }

    @Around("aopPointcut()")
    public String monitor(ProceedingJoinPoint pjp) throws Throwable {
        String msg = (String)pjp.proceed();
        this.setMessage(msg);
        return msg;
    }

}

La classe dont la méthode est intercepté

package my.package.path.config;

public class TestAOPClient {
    public String relayMessage(String msg) {
        return msg;
    }
}

La Classe De Test

package my.package.path.config;

import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;

@Configuration
@ContextConfiguration(classes={WebConfig.class})
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration("src/main/java")
public class AopConfigTest extends AbstractJUnit4SpringContextTests {

     @Bean
     public TestAOP testAop() throws Exception {
        return new TestAOP();
     }

     @Test
     public void assertTestConfigIsActive() {
        TestAOPClient client = new TestAOPClient();
        client.relayMessage("hello");
        assertThat(((TestAOP)applicationContext.getBean("testAop")).getMessage(), equalTo("hello"));

    }
}

Le WebConfig fichier

package my.package.path.web.context;
@Configuration
@EnableWebMvc
@EnableAspectJAutoProxy(proxyTargetClass=false)
@ComponentScan(value={"my.package.path.config", "my.package.path.web"})
public class WebConfig {

}

Invariablement, je reçois l'erreur d'assertion

 Expected: "hello" but: was null

Mon WebApplicationContext semble être ramassé, car au moment de l'exécution, je vais obtenir un ApplicationContext échec du chargement de l'erreur si je spécifier une classe qui n'existe pas pour mon Aspect coupe transverse (pointcut).

Ce qui me manque?

OriginalL'auteur Emilie | 2013-06-06