【发布时间】:2010-06-03 16:44:31
【问题描述】:
将 Javadoc cmets 放在 JUnit 测试类和方法中是最佳实践吗?还是认为它们应该如此易于阅读和简单,以至于无需提供测试意图的叙述?
【问题讨论】:
-
您认为如何改用常规的非 Javadoc 块 cmets?代码风格哪个更好?
将 Javadoc cmets 放在 JUnit 测试类和方法中是最佳实践吗?还是认为它们应该如此易于阅读和简单,以至于无需提供测试意图的叙述?
【问题讨论】:
我在测试中经常使用 Javadoc。 但只有在您将自己的标签添加到 javadoc 时,它才会真正有用。
这里的主要目标是让为您的项目做出贡献的其他开发人员理解测试。为此,我们甚至不需要生成实际的 javadoc。
/**
* Create a valid account.
* @result Account will be persisted without any errors,
* and Account.getId() will no longer be <code>null</code>
*/
@Test
public void createValidAccount() {
accountService.create(account);
assertNotNull(account.getId());
}
接下来我们需要在 Maven 中通知我们的 Javadoc 插件我们添加了一个新标签。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.8</version>
<configuration>
<tags>
<tag>
<name>result</name>
<placement>a</placement>
<head>Test assertion :</head>
</tag>
</tags>
</configuration>
</plugin>
</plugins>
</build>
现在剩下要做的就是调用我们的 maven 插件。
javadoc:test-javadoc (or javadoc:test-aggregate for multi-module projects)
这是一个相当简单的例子,但是在运行更复杂的测试时,不可能通过简单地使用自我描述的方法名称来描述测试。
【讨论】:
我个人很少使用 javadoc cmets,因为我发现它们会增加屏幕上的混乱。如果我能以更自我描述的方式命名一个类、函数或变量,那么我将优先于评论。 Robert C. Martin(又名 Bob 叔叔)的 Clean Code 是一本关于这个主题的优秀书籍。
我个人的偏好是让类和方法都具有自我描述性,即
class ANewEventManager {
@Test
public void shouldAllowClassesToSubscribeToEvents() {
/* Test logic here */
}
}
这种方法的一个优点是在浏览代码之前很容易在 junit 输出中看到失败的原因。
【讨论】:
这个问题导致了“代码是需要 cmets 还是必须是自描述的”的永恒圣战。
正如接受的答案中提到的,许多人引用 Rob Martin 作为“代码应该是描述性的,不需要注释”和“不要在公共 API 以外的任何方法上编写 javadocs”的来源。但“干净的代码”不是“绝对真理的圣经”。合理务实的答案是“它总是取决于”。
我个人的喜好是:
【讨论】: