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

问题描述 投票:0回答:1

在我的 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 逻辑运行。

spring-boot testing aspectj spring-aop
1个回答
0
投票

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

package de.scrum_master.app;

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

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

if()
切入点可以访问这些变量。


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

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

这里的优点是您不需要任何

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.