37

是否可以在 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 注释,这些注释在构建输出中不存在。

谢谢你。

4

6 回答 6

47

在 JUnit 5 中,有@DisplayName注释:

@DisplayName 用于为带注释的测试类或测试方法声明自定义显示名称。显示名称通常用于 IDE 和构建工具中的测试报告,并且可能包含空格、特殊字符甚至表情符号。

例子:

@Test
@DisplayName("Test if true holds")
public void checkTrue() {
    assertEquals(true, true);
}
于 2016-12-21T19:06:42.687 回答
19

TestNG 就是这样做的,这对我来说是最简洁的解决方案:

@Test(description="My funky test")  
public void testFunk() {  
    ...  
}  

有关详细信息,请参阅http://testng.org/javadocs/org/testng/annotations/Test.html

于 2013-07-05T12:08:36.820 回答
14

不完全是您要查找的内容,但您可以提供任何assert方法的描述。

就像是:

@Test
public void testTrue() {
    assertTrue("Testing if true holds", true);
}
于 2012-10-31T13:41:04.657 回答
6

在 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(){}
于 2016-09-20T09:01:11.727 回答
2

您可以在测试后命名测试方法:

public void testThatOnePlusOneEqualsTwo() {
  assertEquals(2, 1 + 1);
}

这将出现在 Eclipse、Surefire 和大多数其他运行程序中。

于 2012-10-31T14:29:54.603 回答
1

详细的解决方案是:您可以Logger在测试中添加一个,将结果记录到文件中。例如,参见 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");,因为您不知道测试将如何执行,并且如果环境不提供控制台,则不会显示您的消息。

于 2012-10-31T13:45:30.897 回答