2

我面临 Maven 和 Surefire 插件的问题。

我有两个测试:testDatePos.java并且testDateNeg.java必须为每个测试设置一个环境变量。它是相同的环境变量 ( DATE_SHIFT) 但不同的值 ( -1 and 1)。

是否可以在 Maven 中配置 surefire-plugin 部分pom.xml以运行这些测试?

这是我的 pom.xml 排除了testDatePos.java运行mvn test正常(我知道这不是解决方案):

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <excludes>
      <exclude>**/testDatePos.java</exclude>
      <!-- this test needs the env variable DATE_SHIFT=1 but 
      the test testDateNeg.java needs it at -1 -->
    </excludes>
    <environmentVariables>
      <DATE_SHIFT>-1</DATE_SHIFT>
    </environmentVariables>
  </configuration>
</plugin>
4

1 回答 1

1

您可以通过在 pom 中指定两个不同的surefire 执行并分叉每个执行来做到这一点。

但是,这意味着这些测试仅在您从 maven 运行它们时才有效,或者至少您必须在运行它们的任何地方更改配置。因此,对于需要环境变量的测试,我会将其添加到这些特定测试的@Before/@After(或@BeforeClass/@AfterClass)中。

@Before public void before() {
  System.setProperty("DATE_SHIFT", "-1");
}

这样,您无需在 Maven 中执行测试即可使其工作。您可能希望存储 DATE_SHIFT 的原始值并在测试结束时恢复它。

于 2012-12-19T10:55:53.717 回答