2011-02-24 64 views
4

我的团队正在努力教育我们的一些开发人员进行测试。他们明白为什么要写测试,并且在写测试的时候,他们应该写测试,但在编写好的测试方面有点欠缺。让JUnit失败,实际上并没有运行断言的测试

我刚才看到一个犯这样

public void SomeTest{ 

@Test 
public void testSomething{ 
System.out.println(new mySomething.getData()); 
} 

所以他们至少确保他们的代码给了他们通过寻找预期的输出。

在我们能真正推销代码评论的想法之前,与此同时,我正在考虑让JUnit在任何没有实际assertXXX或失败语句的测试中失败。然后,我想让这个失败消息说“你的测试应该使用断言并且实际检查输出!”。

我完全期待这导致像assertTrue(1 == 1);这样的电话。我们正在帮助团队进行正确的测试和代码审查,是否有任何技术机制可以帮助已经获得它的开发人员简化生活?那些帮助新人理解的技术机制呢?

回答

1

您可以使用一些静态代码分析器。

我使用PMD其中包括JUnit rule set。有很多IDE plugins这将标记IDE中的规则违规。您可以根据需要配置规则集。

您还可以从其他规则集中获益 - 它会警告您代码风格/最佳实践违规(尽管您必须决定是否该工具或您是傻瓜:-))。

2

我认为你应该考虑组织变革:指导,培训,代码评论。

这些工具只能帮助你,如果你真诚地使用它们并对目标有基本的了解。如果其中一个失踪,他们不会帮助你。

人类只是聪明的做转储的事情或解决指标。我认为如果他们不能写一个有用的测试,你的评估是不正确的,他们是“他们”在船上。自动工具在这个阶段根本不是正确的工具。你不能通过一个程序告诉下一步该做什么。

+0

我和你一起让人们购买并接受教育。我正在寻找更多工具来帮助其他开发人员,并监视代码,以便当我们发现一个不好的测试时,我们可以将其标记出来并与仍在学习的人交谈。 – Freiheit 2011-02-25 17:22:56

0

为未来的观众回答陈述的问题。

如果任何异常,错误抛出 - >测试失败,JUnit使用反射来运行测试函数,否则成功。 Assert类只是一个utils类。