Я хочу использовать аспекты AOP, чтобы изменить аннотации, которые я использую в тесте Spring Boot. < Br /> Однако мой метод @Around не запускается во время выполнения теста.
Если я аннотирую, например, Метод конечной точки внутри контроллера REST, чем он запускается. Но я хочу использовать его для тестов. < /P>
Вот моя аннотация: < /p>
Код: Выделить всё
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {
}
< /code>
Вот мой аспект: < /p>
@Aspect
@Component
public class TestAspect {
public TestAspect() {
// this is called - so @Component works
System.out.println("aspect constructor called");
}
@Around("@annotation(TestAnnotation)")
public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
// this is NOT called in the test - @Around did not work
System.out.println("aroundAdvice() called");
return joinPoint.proceed();
}
}
< /code>
И вот мой тест: < /p>
@SpringBootTest
@ComponentScan(basePackages = { "de.mycompany" }) // root of all my packages
@TestPropertySource(value = "classpath:application-test.yml", factory = YamlPropertySourceFactory.class)
@AutoConfigureMockMvc
class MyTestClass {
@Autowired
private MockMvc mockMvc;
@Test
@TestAnnotation
void testSomething() throws Exception {
System.out.println("testSomething() called.");
// test something with mockMvc
}
}
< /code>
Если я аннотирую конечную точку в RestController, astreadvice () < /code> будет запускается, когда эта конечная точка вызывается или проверяется. Когда мой метод испытаний (здесь: testSomeMehing ()
Использование полностью квалифицированного класса в @Around < /code> тоже не работает:
Код: Выделить всё
@Around("@annotation(de.mycompany.annotation.TestAnnotation)")
Подробнее здесь: https://stackoverflow.com/questions/794 ... ngboottest