很快我们将开始一个新项目。它将是基于Spring MVC的Web应用程序。我们第一次决定开始在应用程序中编写测试。
我们将使用Junit,Mockito和Hamcrest进行写作测试。
由于这将是我们第一次编写测试,而且我们的团队中也没有任何人具有编写测试的经验,因此我们正在寻找一些可以用作参考的示例应用程序。
我们已经浏览了关于如何使用 junit 等编写测试的网络和红色文章,编写测试等时的最佳实践是什么,但到目前为止还没有看到任何实际的应用程序。
我们不想开始编写糟糕的测试。
请帮忙。
到目前为止,这不是最终的列表,而是我经验中的一些建议
-
真正尝试测试单元,特别是因为你使用的是JUnit(而不是testNG)。这意味着,如果你在测试中发现一些运行顺序是必需的,那么你不是在测试单元,现在你正在测试集成或功能
-
与#1相关,我强烈建议使用模拟库,您似乎这样做了。 我,我使用Mockito,它使用起来非常简单,测试最终非常可读。你需要这样做的原因是,任何合理的类都依赖于其他类(如果不是顺便说一句,你的类可能不是很内聚)或外部资源(数据库等),因为在单元测试中你应该一次只测试一个类,你需要模拟其他未被测试的类。
-
可测试性设计。这个很棘手,因为我相信你不应该仅仅为了测试而公开(即公开)方法,但有时你可能需要使一些私有方法受包保护,以便单元测试可以直接调用它们。当您的方法执行您不想在测试环境中执行的操作(如创建文件)时,这非常有用,因此您可以将这些特定部分分离到单独的方法中,然后可以在测试中避免这些方法。确保在 javadoc 中注释当一个方法不应该在单元测试之外使用时
-
尽量避免在工作方法中创建/打开资源。例如,不要使用然后在方法中打开并创建输入流的 File 参数,而是直接传递输入流。这样,在测试时,您可以传递内存流。或者以更一般的方式,依赖注入与单元测试非常吻合。每次在方法中调用
new
时,都可能会使单元测试更难运行和/或断言 -
如果您注意到要对某个方法运行测试,您需要首先调用许多外部方法来配置被测单元的状态,那么最好进行一些重构。这是高耦合的一个很好的指示。这是我最喜欢的单元测试之一,你为你的类创建第二个用户的事实可以帮助你仔细检查你的设计。
当然,很多人不会同意其中一些或全部,对于那些人来说,不要把它留给自己,评论这个答案,以便附近有另一个POV。它也会帮助我
我也评论这本书,它有很多好的实践和气味,可以帮助你在单元测试中找到不好的做法。
http://www.walmart.com/ip/4013717?wmlspartner=wlpa&selectedSellerId=3&adid=22222222227002169628&wl0=&wl1=g&wl2=c&wl3=14146085830&wl4=&wl5=pla&wl6=35052138190&veh=sem