在我的 spring boot 项目中,我使用 MockMVC 来测试控制器(网络)层。但是我的项目中也有 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
,Spring boot中没有这样的东西。如果有人能让我知道如何在运行时检查代码是否正在运行单元测试,我也会知道如何防止 AOP 逻辑运行。
正如西蒙已经试图向您解释的那样,我在另一个答案中的意思是这样的:
package de.scrum_master.app;
public class TestMode {
public static boolean ACTIVE = false;
}
但实际上我还列出了一些其他选项,例如环境变量和系统属性。如果我是你,我会使用其中之一,因为在你的 Maven 或 Gradle 构建中,通过配置设置属性或环境变量将非常容易。您的
if()
切入点可以访问这些变量。
特别是在 Spring 的上下文中,有一个更简单的选项:测试应用程序配置。只需为您的测试提供一个没有方面的配置。这样你就可以有不同的配置
这里的优点是您不需要任何
if()
切入点或将有关测试/生产环境的任何其他知识构建到您的方面,这是非常难看的。我的另一个答案只显示你可以做什么,并没有说这是最好的解决方案。