自定义 Java 注释以忽略 CI 服务器上的集成测试
Custom Java Annotation to ignore integration tests on CI server
我认为为 junit 方法和包含集成测试的 类 自定义注释会很方便。当测试在我们的 CI (Jenkins) 服务器上执行时,此注释将有效地像 @Ignore junit 注释一样工作,并且测试将 运行 在本地开发机器上正常运行。为了确定 运行 测试机器是否应该允许集成测试执行,我会检查 System.getenv("WORKSPACE") 以查看它是否 exists/contains "jenkins".
没有写过注解,对junit的实现细节不熟悉。我所描述的可能吗?如果是这样,我该怎么做?
JUnit 5
JUnit 5 有 Environment Variable Conditions 用于此目的。在您的情况下,尝试添加以下内容:
@Test
@EnabledIfEnvironmentVariable(named = "WORKSPACE", matches = "jenkins")
void onlyOnJenkins() {
// ...
}
@Test
@DisabledIfEnvironmentVariable(named = "WORKSPACE", matches = "jenkins")
void notOnJenkins() {
// ...
}
请注意,matches
注释属性是支持通配符的正则表达式。详情请阅读@EnabledIfEnvironmentVariable and @DisabledIfEnvironmentVariable
的JavaDoc
JUnit 用户指南中的 Conditional Test Execution 一章提供了更多您可能会觉得有用的注释和示例。
JUnit 4
请阅读此 answer 以了解如何使用 org.junit.Assume
有条件地执行测试。
很好的信息,谢谢!我将不得不在我们的积压工作中添加一项技术债务项目以升级到 Junit 5。
但是,Assume 完全满足了我的需要。我能够将以下内容添加到我的测试中 class:
@Before
public void checkHost(){
final String workspaceKey = "WORKSPACE";
final String workspaceValue = System.getenv(workspaceKey);
final boolean isJenkins = StringUtils.contains(workspaceValue, "Jenkins");
log.info("checkHost(): " + workspaceKey + ":" + workspaceValue + " -> isJenkins: " + isJenkins);
assumeFalse(isJenkins);
}
我认为为 junit 方法和包含集成测试的 类 自定义注释会很方便。当测试在我们的 CI (Jenkins) 服务器上执行时,此注释将有效地像 @Ignore junit 注释一样工作,并且测试将 运行 在本地开发机器上正常运行。为了确定 运行 测试机器是否应该允许集成测试执行,我会检查 System.getenv("WORKSPACE") 以查看它是否 exists/contains "jenkins".
没有写过注解,对junit的实现细节不熟悉。我所描述的可能吗?如果是这样,我该怎么做?
JUnit 5
JUnit 5 有 Environment Variable Conditions 用于此目的。在您的情况下,尝试添加以下内容:
@Test
@EnabledIfEnvironmentVariable(named = "WORKSPACE", matches = "jenkins")
void onlyOnJenkins() {
// ...
}
@Test
@DisabledIfEnvironmentVariable(named = "WORKSPACE", matches = "jenkins")
void notOnJenkins() {
// ...
}
请注意,matches
注释属性是支持通配符的正则表达式。详情请阅读@EnabledIfEnvironmentVariable and @DisabledIfEnvironmentVariable
JUnit 用户指南中的 Conditional Test Execution 一章提供了更多您可能会觉得有用的注释和示例。
JUnit 4
请阅读此 answer 以了解如何使用 org.junit.Assume
有条件地执行测试。
很好的信息,谢谢!我将不得不在我们的积压工作中添加一项技术债务项目以升级到 Junit 5。
但是,Assume 完全满足了我的需要。我能够将以下内容添加到我的测试中 class:
@Before
public void checkHost(){
final String workspaceKey = "WORKSPACE";
final String workspaceValue = System.getenv(workspaceKey);
final boolean isJenkins = StringUtils.contains(workspaceValue, "Jenkins");
log.info("checkHost(): " + workspaceKey + ":" + workspaceValue + " -> isJenkins: " + isJenkins);
assumeFalse(isJenkins);
}