当前位置: 首页 > 知识库问答 >
问题:

Maven failsafe plugin-在预集成测试中传播Maven plugin设置的系统属性

韩弘方
2023-03-14

我有以下问题,无法在其他地方找到任何答案:

我正在使用https://github.com/joelittlejohn/embedmongo-maven-plugin用于在预集成测试阶段启动mongo db服务器,然后在指定端口上运行与mongo db交互的集成测试。然而,对于插件的原始版本,我不得不在插件配置中硬编码端口,这可能会与在同一台机器上运行的其他进程发生冲突,并有效地拒绝使用相同端口的模块的并行执行。

因此,我准备了一个补丁https://github.com/jumarko/embedmongo-maven-plugin/compare/jma-random-port,使我能够在随机端口上启动mongo db。但是,我无法将分配的端口(在预集成测试阶段由插件分配)传递给在集成测试阶段分叉JVM中运行的集成本身(见https://github.com/jumarko/embedmongo-maven-plugin/blob/3462a909b546eab6afe1f87691ac49336ddab845/src/test/java/com/github/joelittlejohn/embedmongo/MongoIT.java)。

我尝试将分配的端口设置为系统属性(https://github.com/jumarko/embedmongo-maven-plugin/compare/jma-random-port#L1R201),但此属性不会传播到分叉的JVM。作为一种解决方法,我甚至尝试在故障安全插件配置(https://github.com/jumarko/embedmongo-maven-plugin/compare/jma-random-port#L0R104)中设置此属性,但没有任何效果(我猜属性解析发生在嵌入蒙戈插件实际设置它之前)。

有没有办法将运行时(通过embedmongo maven插件)动态设置的系统属性传播到用于集成测试执行的分叉JVM?是否有任何(可能更好的)替代方法可以将mongo db运行的端口传递给集成测试本身?

注意:如果故障保护插件forkMode设置为never,则集成测试可以访问系统属性,但这不是我的选项。

共有1个答案

龙隐水
2023-03-14

在插件中,您可以使用AbstractMojo设置将传播到故障保护插件配置的项目属性。项目字段:

project.getProperties().put(propertyName,propertyValue);

我用一个工作项目做这件事,它做你想要的。

所以如果你已经跑了

project.getProperties().put("the.port", 1234) 

在mojo中,您将能够在故障保护配置中使用属性${.port}。

 类似资料:
  • 我想编写一些测试,检查部署的WAR的XML Spring配置。不幸的是,有些bean需要设置一些环境变量或系统属性。在使用@ContextConfiguration的方便测试样式时,如何在spring bean初始化之前设置环境变量?

  • 问题内容: 我想编写一些测试来检查已部署WAR的XML Spring配置。不幸的是,某些bean需要设置一些环境变量或系统属性。通过@ContextConfiguration使用便捷的测试样式时,如何在初始化Spring bean之前设置环境变量? 如果我用注释配置应用程序上下文,那么在初始化spring上下文之前,我看不到钩子可以在其中做些事情。 问题答案: 您可以在静态初始化程序中初始化Sys

  • 我已经在独立完整版中添加了系统属性标签。xml,但它不能在独立模式下工作。然而,如果我在域中添加相同的标记。xml,它适用于域模式。 根据这篇文章对jBoss的一般配置概念 可以在domain.xml、host.xml和standalone.xml中的许多地方设置系统属性值。 那么standalone-full.xml呢? 我不想通过命令行设置它,甚至不想在 java 代码中设置它。

  • 问题内容: 我们正在使用类似于系统规则的方法来处理JUnit 4测试中的(系统)属性。这样做的主要原因是每次测试后都要清理环境,以便其他测试不会无意间依赖于可能的副作用。 由于JUnit 5已发布,所以我想知道是否存在“ JUnit 5方法”吗? 问题答案: 有JUnit 5 Pioneer,一个“ JUnit 5扩展包”。它带有和。从文档: 的和注释可用于清除,分别为测试执行系统设置属性的值。这

  • 问题内容: 我在这里跟随有关JAAS身份验证的教程,当它显示如何运行示例代码时,说应该使用Java启动器的标准选项- Djava.security.auth.login.config ==启动已编译的类。 sample_jaas.config。这样,将设置系统属性: 我是用这种方式完成的,但是现在我也想在NetBeans中运行代码。由于NetBeans使用Ant,因此我认为指定这些选项可能有所不同

  • 我需要进行测试前配置,在运行XCUITest(自动化测试)用例之前进行一次设置, 测试前设置示例:(测试周期需要做一次,以下API的输出用于所有测试用例) 提取访问令牌 从远程配置文件提取URL。 从文档中,我发现协议的方法是进行预测试设置的理想场所。 但是方法没有被调用或执行,下面列出的的所有方法都被正确执行。 我尝试在UITest中设置但没有成功,它显示以下错误 如何执行方法?如有任何帮助,我