在我的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逻辑运行。
1条答案
按热度按时间oyt4ldly1#
我在另一个答案中的意思,正如西蒙已经试图向你们解释的,是这样的:
但实际上,我还列出了一些其他选项,如环境变量和系统属性。如果我是您,我会使用其中的一个,因为在Maven或Gradle构建中,通过配置设置属性或环境变量非常容易。您的
if()
切入点可以访问这些变量。特别是在Spring环境中,有一个更简单的选择:测试应用程序配置。只需提供不带测试方面的配置。这样,您就可以为
这样做的好处是你不需要任何
if()
切入点,也不需要在你的方面中构建任何其他关于测试/生产环境的知识,这是相当丑陋的。我的另一个答案只是显示了你***可以***做什么,它并没有说这是最好的解决方案。