7.1 @Suite注解
以及一些更常用的注解。即使您不使用它们,您也一定会看到使用它们进行的测试。因此,有必要至少大致了解那里写的内容。
测试可以组合成组。对此有一个特殊的注解@Suite
。例子:
@Suite
@SuiteDisplayName("JUnit Platform Suite Demo")
@SelectPackages("com.codegym.test")
@IncludeClassNamePatterns(".*Tests")
class SuiteDemo {
}
在这种情况下,@Suite 注释与其他注释配对。
SuiteDisplayName
– 设置日志中测试组的名称;SelectPackages
- 设置要在其中查找测试类的包列表;IncludeClassNamePatterns
– 设置测试类名称的模式。
为什么会有这样的困难?想象一下,项目的所有测试都已执行,比方说,50 小时。并且在每次提交后执行它们非常昂贵。在这种情况下,创建一些单独的测试脚本并以更灵活的方式设置测试是很有用的。
7.2 @Order注解
另一个常见的注解是@TestMethodOrder
. 它允许您指定在测试类中调用测试方法的顺序。当您知道方法调用相互影响时,它会非常有用,但在某种顺序下,一切都应该按预期进行。经常使用。
首先,您可以设置要按字母顺序调用的方法:
@TestMethodOrder(MethodOrderer.MethodName.class)
public class AlphanumericOrderUnitTest {
}
其次,每个方法都可以有一个带有序号的特殊注释。
@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {
@Test
@Order(1)
public void firstTest() {
}
@Test
@Order(2)
public void secondTest() {
}
}
或者甚至创建一个单独的类来指定调用测试的顺序:
@TestMethodOrder(CustomOrder.class)
public class CustomOrderUnitTest {
}
//sort method names alphabetically, but ignoring case
public class CustomOrder implements MethodOrderer {
public void orderMethods(MethodOrdererContext context) {
context.getMethodDescriptors().sort(
(MethodDescriptor m1, MethodDescriptor m2)->
m1.getMethod().getName().compareToIgnoreCase(m2.getMethod().getName()));
}
}
7.3 @DisplayName 注解
最后,可以为每个测试命名。如果有很多测试并且您创建测试的特殊场景(子集),这会很方便。对此有一个特殊的注解@DisplayName
。
例子:
@DisplayName("Friendly name for the test")
public class DisplayNameCustomTest {
@Test
@DisplayName("Input Validation")
void inputData() {
}
@DisplayName("Checking critical situations")
@Test
void criticalCases() {
}
}
与设置测试顺序的情况一样,您可以在此处创建一个特殊方法,该方法将生成测试名称和测试方法。例子:
@DisplayNameGeneration(DisplayNameGeneratorUnitTest.ReplaceCamelCase.class)
class DisplayNameGeneratorUnitTest {
@Test
void camelCaseName() {
}
static class ReplaceCamelCase extends DisplayNameGenerator.Standard {
@Override
public String generateDisplayNameForClass(Class testClass) {
return super.generateDisplayNameForClass(testClass).toUpperCase();
}
}
}
看看它是多么容易:)
GO TO FULL VERSION