以下注解只有在与 SpringRunner、Spring 的 JUnit 4 规则 或 Spring 的 JUnit 4 支持类 一起使用时才被支持:
@IfProfileValue
表示注解的测试在特定的测试环境中被启用。如果配置的 ProfileValueSource 为所提供的名称返回一个匹配的值,则测试被启用。否则,测试将被禁用,并且实际上是被忽略。
你可以在类级、方法级或两者中应用 @IfProfileValue
。对于该类或其子类中的任何方法,@IfProfileValue
的类级使用优先于方法级使用。具体来说,如果一个测试在类级和方法级都被启用,那么它就是被启用的。没有 @IfProfileValue
意味着测试是隐式启用的。这类似于 JUnit 4 的 @Ignore
注解的语义,除了 @Ignore
的存在总是禁用一个测试。
下面的例子显示了一个有 @IfProfileValue
注解的测试:
// 只有当 value 是指定值得时候才运行该测试方法
@IfProfileValue(name="java.vendor", value="Oracle Corporation")
@Test
public void testProcessWhichRunsOnlyOnOracleJvm() {
// 一些只应在甲骨文公司的 Java VM 上运行的逻辑
}
另外,你可以用一个值的列表来配置 @IfProfileValue
(具有 OR 语义),以便在 JUnit 4 环境中实现类似 TestNG 的测试组支持。考虑一下下面的例子:
@IfProfileValue(name="test-groups", values={"unit-tests", "integration-tests"})
@Test
public void testProcessWhichRunsForUnitOrIntegrationTestGroups() {
// some logic that should run only for unit and integration test groups
}
@ProfileValueSourceConfiguration
@ProfileValueSourceConfiguration
是一个类级别的注解,它指定了在检索通过 @IfProfileValue
注解配置的配置文件值时要使用什么类型的 ProfileValueSource。如果没有为测试声明 @ProfileValueSourceConfiguration
,则默认使用 SystemProfileValueSource。下面的例子显示了如何使用 @ProfileValueSourceConfiguration
:
// 使用一个自定义的配置文件值源。
@ProfileValueSourceConfiguration(CustomProfileValueSource.class)
public class CustomProfileValueSourceTests {
// class body...
}
@Timed
@Timed
表示注解的测试方法必须在指定的时间段(以毫秒为单位)内完成执行。如果文本执行时间超过了指定的时间段,则测试失败。
这个时间段包括运行测试方法本身,任何测试的重复(见 @Repeat
),以及任何测试夹具的设置或拆解。下面的例子显示了如何使用它:
// 将测试的时间段设置为一秒。
@Timed(millis = 1000)
public void testProcessWithOneSecondTimeout() {
// 一些运行时间不应超过 1 秒的逻辑
}
Spring 的 @Timed
注解与 JUnit 4 的 @Test(timeout=...)
支持有着不同的语义。具体来说,由于 JUnit 4 处理测试执行超时的方式(即在一个单独的线程中执行测试方法),@Test(timeout=...)
在测试时间过长的情况下会预先失败。另一方面,Spring 的 @Timed
不会抢先让测试失败,而是等待测试完成后再失败。
@Repeat
@Repeat
表示注解的测试方法必须重复运行。测试方法运行的次数在注解中被指定。
重复执行的范围包括测试方法本身的执行,以及任何测试夹具的设置或拆除。当与 SpringMethodRule 一起使用时,该范围还包括 TestExecutionListener 实现对测试实例的准备。下面的例子展示了如何使用 @Repeat
注解:
@Repeat(10) // 重复这个测试十次。
@Test
public void testProcessRepeatedly() {
// ...
}