Spring Aspect nie został uruchomiony w teście jednostkowym

OK, mówimy o Spring (3.2.0) MVC

Mamy zdefiniowany punkt odniesienia, który zostanie wywołany „wokół” adnotacji w ten sposób:

@Around("@annotation(MyAnnotation)")
public void someFunction() {

}

Następnie w kontrolerze mamy:

@Controller
@Component
@RequestMapping("/somepath")
public class MyController {

    @Autowired
    private MyService service;

    ...

    @MyAnnotation
    @RequestMapping(value = "/myendpoint", method = RequestMethod.POST, produces = "application/json")
    @ResponseBody
    public Object myEndpoint(@RequestBody MyRequestObject requestObject, HttpServletRequest request, HttpServletResponse response) {
        ...
        return service.doSomething(requestObject);
    }         
}

Następnie mamy test jednostkowy, który wygląda tak:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = {"../path/to/applicationContext.xml"})
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class})
public class MyControllerTest {

    private MockMvc mockMvc;

    @InjectMocks
    private MyController controller;

    @Mock
    private MyService myService;    

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
        this.mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
    }


    @Test
    public void myTest() {
        MyRequest request = new MyRequest();
        MyResponse response = new MyResponse();
        String expectedValue = "foobar";

        Mockito.when(myService.doSomething((MyRequest) Mockito.any())).thenReturn(response);

        MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.post("/myendpoint");

        String request = IOUtils.toString(context.getResource("classpath:/request.json").getURI());

        builder.content(request);
        builder.contentType(MediaType.APPLICATION_JSON);

        mockMvc.perform(builder)
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.jsonPath("$.someKey").value(expectedValue));

        Mockito.verify(myService, Mockito.times(1)).doSomething((MyRequest) Mockito.any());
    }
}

Test działa poprawnie, ale aspekt zdefiniowany wokół adnotacji (MyAnnotation) nie jest wykonywany. Wykonuje się to dobrze, gdy punkt końcowy jest wyzwalany przez areal żądanie (np. podczas pracy w kontenerze serwletu), ale nie uruchamia się podczas testu.

Czy jest to szczególna „cecha” MockMvc, która nie uruchamia aspektów?

FYI nasz applicationContext.xml jest skonfigurowany z:

<aop:aspectj-autoproxy/>

i jak wspomniałem, aspekty faktycznie działają w rzeczywistości, po prostu nie w teście.

Ktoś wie, jak doprowadzić te aspekty do ognia?

Dzięki!

questionAnswers(1)

yourAnswerToTheQuestion