2

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

我正在使用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-plugin 实际设置它之前发生了正确的解析)。

有什么方法可以在运行时(通过 embedmongo-maven-plugin)动态地将系统属性集传播到用于集成测试执行的分叉 JVM?是否有任何(可能更好的)替代方案如何将 mongo db 正在运行的端口传递给集成测试本身?

注意:如果故障安全插件 forkMode 设置为从不,集成测试能够访问系统属性,但这对我来说不是一个选项。

4

1 回答 1

0

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

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

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

所以如果你跑了

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

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

于 2013-10-01T13:02:40.730 回答