gpt4 book ai didi

java - 使用 MockMvc 进行 Spring Boot Aspectj 测试

转载 作者:行者123 更新时间:2023-12-04 00:01:55 25 4
gpt4 key购买 nike

我有一个带有 Aspectj 的 Spring 启动代码。这段代码是用基本的 MVC 架构编写的。然后我只是尝试用 MockMVC 测试它。但是当我尝试对其进行测试时,Aspectj 并没有中断。 Aspectj 有没有特殊的配置?

Controller :

@GetMapping("user/{userId}/todo-list")
public ResponseEntity<?> getWaitingItems(@RequestUser CurrentUser currentUser){
...handle it with service method.
}

方面:
@Pointcut("execution(* *(.., @RequestUser (*), ..))")
void annotatedMethod()
{
}

@Before("annotatedMethod() && @annotation(requestUser)")
public void adviseAnnotatedMethods(JoinPoint joinPoint, RequestUser requestUser)
{
...
}

测试:
@WebMvcTest(value = {Controller.class, Aspect.class})
@ActiveProfiles("test")
@ContextConfiguration(classes = {Controller.class, Aspect.class})
@RunWith(SpringJUnit4ClassRunner.class)
public class ControllerTest
{
@Autowired
private MockMvc mockMvc;

@Autowired
private WebApplicationContext webApplicationContext;

@Autowired
private Controller controller;

@MockBean
private Service service;

@Before
public void setUp()
{
mockMvc = MockMvcBuilders
.webAppContextSetup(webApplicationContext)
.build();
}

@Test
public void getWaitingItems() throws Exception
{
mockMvc.perform(get("/user/{userId}/todo-list", 1L))
.andExpect(status().isOk());
}
}

最佳答案

不需要 @SpringBootTest如果您想对特定 Controller (Web 层)+ 自定义 Aspect 逻辑(AOP 层)进行集成测试。

尝试这样的事情

@WebMvcTest(controllers = {AnyController.class})
@Import({AopAutoConfiguration.class, ExceptionAspect.class})
public class ErrorControllerAdviceTest {
  • AnyController.class:被测 Controller
  • AopAutoConfiguration.class:AOP 的 Spring Boot 自动配置
  • ExceptionAspect.class:包含 AOP 逻辑的类
  • @Aspect
    @Component
    public class ExceptionAspect {}

    使用 Spring Boot 2.2.1.RELEASE 和 JUNIT5 进行测试。
    我不确定,如果我的解决方案在技术上与@Deadpool 的答案相同

    关于java - 使用 MockMvc 进行 Spring Boot Aspectj 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60101172/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com