在JUnit中是否可以为将来的读者添加测试的简要描述(例如,正在测试的内容,一些简短的解释,预期的结果......)?我的意思是像ScalaTest,我可以写的地方:
test("Testing if true holds") {
assert(true)
}
理想的方法是使用一些注释,例如
@Test
@TestDescription("Testing if true holds")
public void testTrue() {
assert(true);
}
因此,如果我使用Maven(或某些类似的工具)运行这样的带注释的测试,我可以使用ScalaTest获得与SBT中相似的输出:
- Testing if entity gets saved correctly
- Testing if saving fails when field Name is not specified
- ...
目前我可以使用非常长的方法名称或编写javadoc注释 不存在于构建输出中。
谢谢。
答案 0 :(得分:19)
在JUnit 5中,有@DisplayName注释:
@DisplayName用于声明自定义显示名称 带注释的测试类或测试方法。通常使用显示名称 用于IDE和构建工具中的测试报告,可能包含空格, 特殊字符,甚至是表情符号。
示例:
@Test
@DisplayName("Test if true holds")
public void checkTrue() {
assertEquals(true, true);
}
答案 1 :(得分:15)
TestNG是这样做的,对我来说这是最好的解决方案:
@Test(description="My funky test")
public void testFunk() {
...
}
有关详细信息,请参阅http://testng.org/javadocs/org/testng/annotations/Test.html。
答案 2 :(得分:13)
不完全符合您的要求,但您可以提供任何assert
方法的说明。
类似的东西:
@Test
public void testTrue() {
assertTrue("Testing if true holds", true);
}
答案 3 :(得分:5)
我更喜欢在JUnit中测试时遵循标准格式。测试的名称是
test[method name]_[condition]_[outcome]
例如:
@Test
public void testCreateObject_nullField_errorMessage(){}
@Test
public void testCreateObject_validObject_objectCreated(){}
我认为这种方法在进行TDD时非常有用,因为您可以开始编写所有测试名称,以便了解测试/开发所需的内容。
我还是欢迎来自JUnit的测试描述功能。
这肯定比我过去看过的其他测试更好:
@Test public void testCreateObject1(){}
@Test public void testCreateObject2(){}
@Test public void testCreateObject3(){}
或
@Test public void testCreateObjectWithNullFirstNameAndSecondNameTooLong(){}
答案 4 :(得分:2)
您可以在测试后命名测试方法:
public void testThatOnePlusOneEqualsTwo() {
assertEquals(2, 1 + 1);
}
这将出现在Eclipse,Surefire和其他大多数参赛者中。
答案 5 :(得分:0)
详细解决方案将是:您可以在测试中添加Logger
,将结果记录到文件中。例如See log4j。然后你可以在文件中读取结果并打印成功的语句,assert
状态不能。
简单解决方案:您可以为每个测试方法添加JDoc
描述,如果生成JavaDoc,将对此进行概述。
每当assert
语句失败时,每个assert
语句都可以提供将要打印的消息。
/**
* test the List#size() increasement after adding an Object to a List.
*/
public void testAdd(){
List<Object> list = new LinkedList<>();
list.add(new Object());
assertEquals("size should be 1, because of adding an Object", 1, list.size());
}
请勿使用System.out.println("your message");
,因为您不知道如何执行测试,如果环境没有提供控制台,则不会显示您的消息。