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



在我的春季启动项目中,我正在使用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)
}

问题在我的代码注释:)

我已经检查了这个答案,我理解使用if()表达式,但我没有得到TestMode.ACTIVE,春天的启动中没有这样的东西。如果有人能让我知道如何在运行时检查代码是否正在运行单元测试,我也会知道如何防止 AOP 逻辑运行。

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

package de.scrum_master.app;
public class TestMode {
public static boolean ACTIVE = false;
}

但实际上我还列出了一些其他选项,例如环境变量和系统属性。如果我是你,我会使用其中之一,因为在您的 Maven 或 Gradle 构建中,通过配置设置属性或环境变量非常容易。您的if()切入点可以访问这些变量。


特别是在Spring的上下文中,有一个更简单的选择:测试应用程序配置。只需提供不带测试方面的配置。这样,您就可以拥有不同的配置

  • 生产环境,
  • 单元测试(无方面(,
  • 集成测试(例如,与单元测试和生产不同(。
  • 等等。

这样做的好处是,您不需要任何if()切入点或将有关测试/生产环境的任何其他知识构建到您的方面,这是非常丑陋的。我的另一个答案只显示了你能做什么,并没有说这是最好的解决方案。

最新更新