【问题标题】:@SpringBootTest Toggable webEnvironment?@SpringBootTest 可切换网络环境?
【发布时间】:2022-01-29 10:50:45
【问题描述】:

我想切换 SpringBootTest 中的 webEnvironment 配置,以支持在管道中运行测试(测试需要能够自行启动服务器)和本地(我想使用独立服务器进行更快的测试。

认为拥有一个我可以设置的配置文件将是一个很好的解决方案,但 SpringBootTest 似乎完全忽略了我在同一级别附加的任何配置文件,它在 Spring 的生命周期中获取配置文件是否为时过早?有没有更好的方法来做到这一点?

@Profile("myProfile")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) // Starts regardless of what @Profile is
public class MyClass{
   ...
}

E: 相关问题: SpringBootTest enable/disable webEnvironment based on input

E2:经过下面的一些讨论,我放弃了远程模式,不值得麻烦。

【问题讨论】:

  • JUnit 创建测试,而不是 Spring。 JUnit 不关心 Spring 注释。
  • 尝试 \@ActiveProfiles 注释。
  • @ActiveProfiles 仅激活配置文件吗?如果我这样做了,我仍然无法获得想要的行为,即能够切换应用程序是否应该启动。

标签: java spring-boot-test spring-profiles


【解决方案1】:

我想知道为什么您甚至需要在这里依赖弹簧? JUnit 已经有@EnabledIf 注释(documentation),因此您可以使用它甚至不尝试运行测试。

据我了解,它甚至更好,因为这适用于所有甚至可能不运行 spring 的测试(例如单元测试)。此外,从性能端点来看应该会更好(您甚至不尝试运行应用程序上下文、查找/注册 bean 等)

【讨论】:

  • 对不起,如果不清楚,修改 OP 以试图澄清。无论 SpringBootTest 是什么,我都想运行测试,但是一个配置应该自行启动服务器,而另一个配置希望它已经在某个地方运行。因为它是同一组测试,无论我不想复制所有测试并拥有两组 SpringBootTest。
  • 添加 - 此模块中的所有测试都是集成测试,因此无需担心单元测试。
  • 你能澄清一下“已经在某处跑步”是什么意思吗? SpringBootTest 旨在自行运行服务器...否则,您可以使用 @ContextConfiguration / 或者可能带有参数的 SpringBootTest 将表示从其中加载 bean 的配置,但同样,请提供有关您正在尝试的内容的更多信息达到
  • 当然,我在本地使用“mvn spring-boot:run”在 WSL 中启动应用程序,然后从 IntelliJ 内部运行集成测试。然而,这会在构建管道中产生问题,因为我需要向 maven 添加步骤,以便它以类似的方式启动服务器,这似乎是一个非常令人头疼的正常工作,因此我希望 SpringBootTest 注释是可切换的。
  • 如果你使用@SpringBootTest注解你不应该真的运行远程应用程序,为什么不支持@SpringBootTest注解的测试,我的意思是你为什么要在运行测试时运行远程应用程序本地?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多