Infra JUnit 4 测试注解
以下注解仅在与 InfraRunner、Infra JUnit 4 规则 或 Infra JUnit 4 支持类 结合使用时才受支持:
@IfProfileValue
@IfProfileValue 指示带注解的测试针对特定的测试环境启用。
如果配置的 ProfileValueSource 返回提供的 name 的匹配 value,则启用测试。
否则,测试将被禁用,实际上被忽略。
您可以在类级别、方法级别或两者都应用 @IfProfileValue。
@IfProfileValue 的类级使用优先于该类或其子类中任何方法的方法级使用。
具体来说,如果测试在类级别和方法级别都启用,则启用该测试。
不存在 @IfProfileValue 意味着测试默认启用。
这类似于 JUnit 4 的 @Ignore 注解的语义,不同之处在于 @Ignore 的存在总是禁用测试。
以下示例显示了一个带有 @IfProfileValue 注解的测试:
-
Java
@IfProfileValue(name="java.vendor", value="Oracle Corporation") (1)
@Test
public void testProcessWhichRunsOnlyOnOracleJvm() {
// 一些仅应在 Oracle Corporation 的 Java VM 上运行的逻辑
}
| 1 | 仅当 Java 供应商为 "Oracle Corporation" 时运行此测试。 |
或者,您可以为 @IfProfileValue 配置 values 列表(具有 OR 语义),以在 JUnit 4 环境中实现类似 TestNG 的测试组支持。
考虑以下示例:
-
Java
@IfProfileValue(name="test-groups", values={"unit-tests", "integration-tests"}) (1)
@Test
public void testProcessWhichRunsForUnitOrIntegrationTestGroups() {
// 一些仅应针对单元测试和集成测试组运行的逻辑
}
| 1 | 针对单元测试和集成测试运行此测试。 |
@ProfileValueSourceConfiguration
@ProfileValueSourceConfiguration 是一个类级注解,用于指定在检索通过 @IfProfileValue 注解配置的配置文件值时要使用的 ProfileValueSource 类型。
如果未为测试声明 @ProfileValueSourceConfiguration,则默认使用 SystemProfileValueSource。
以下示例显示了如何使用 @ProfileValueSourceConfiguration:
-
Java
@ProfileValueSourceConfiguration(CustomProfileValueSource.class) (1)
public class CustomProfileValueSourceTests {
// 类体...
}
| 1 | 使用自定义配置文件值源。 |
@Timed
@Timed 指示带注解的测试方法必须在指定的时间段内(以毫秒为单位)完成执行。
如果文本执行时间超过指定的时间段,则测试失败。
该时间段包括运行测试方法本身、测试的任何重复(请参阅 @Repeat)以及测试夹具的任何设置或拆卸。
以下示例显示了如何使用它:
-
Java
@Timed(millis = 1000) (1)
public void testProcessWithOneSecondTimeout() {
// 一些运行时间不应超过 1 秒的逻辑
}
| 1 | 将测试的时间段设置为一秒。 |
Infra @Timed 注解具有与 JUnit 4 的 @Test(timeout=…) 支持不同的语义。
具体来说,由于 JUnit 4 处理测试执行超时的方式(即在单独的 Thread 中执行测试方法),如果测试花费的时间太长,@Test(timeout=…) 会抢先使测试失败。
另一方面,Infra @Timed 不会抢先使测试失败,而是等待测试完成后再失败。
@Repeat
@Repeat 指示带注解的测试方法必须重复运行。
注解中指定了测试方法要运行的次数。
要重复的执行范围包括测试方法本身的执行以及测试夹具的任何设置或拆卸。
当与 InfraMethodRule 一起使用时,该范围还包括 TestExecutionListener 实现对测试实例的准备。
以下示例显示了如何使用 @Repeat 注解:
-
Java
@Repeat(10) (1)
@Test
public void testProcessRepeatedly() {
// ...
}
| 1 | 重复此测试十次。 |