Spring Boot 防止在运行测试时触发AOP(AspectJ)代码

siotufzp  于 2023-03-18  发布在  Spring
关注(0)|答案(1)|浏览(145)

在我的Sping Boot 项目中,我使用MockMVC测试控制器(web)层,但是我的项目中也有AOP(AspectJ)逻辑,当我使用MockMVC对控制器进行单元测试时,测试也会触发AOP代码,如何防止在对控制器进行单元测试时触发AOP代码?

@Test
public void testMyControllerMethod() {
   ...

   // myRequest hits an endpoint function of my controller, there is also AOP intercept the function call, how can I disable AOP to be triggered while running test?
   mockMVC.perform(myRequest).andExpect(okStatus)

}

问题在我的代码注解中:)
我已经检查了this answer,我理解使用if()表达式,但是我没有得到TestMode.ACTIVE,在Sping Boot 中没有这样的东西。如果有人能告诉我如何在运行时检查代码是否正在运行单元测试,我也会知道如何防止AOP逻辑运行。

oyt4ldly

oyt4ldly1#

我在另一个答案中的意思,正如西蒙已经试图向你们解释的,是这样的:

package de.scrum_master.app;

public class TestMode {
  public static boolean ACTIVE = false;
}

但实际上,我还列出了一些其他选项,如环境变量和系统属性。如果我是您,我会使用其中的一个,因为在Maven或Gradle构建中,通过配置设置属性或环境变量非常容易。您的if()切入点可以访问这些变量。
特别是在Spring环境中,有一个更简单的选择:测试应用程序配置。只需提供不带测试方面的配置。这样,您就可以为

  • 生产环境,
  • 单元测试(无方面),
  • 集成测试(例如,具有方面但不同于单元测试和生产)。
  • 等等。

这样做的好处是你不需要任何if()切入点,也不需要在你的方面中构建任何其他关于测试/生产环境的知识,这是相当丑陋的。我的另一个答案只是显示了你***可以***做什么,它并没有说这是最好的解决方案。

相关问题