【问题标题】:Open source spring MVC aplication with Junit tests? [closed]带有 Junit 测试的开源 Spring MVC 应用程序? [关闭]
【发布时间】:2013-11-02 08:19:31
【问题描述】:

很快我们将开始一个新项目。它将是基于 Spring MVC 的 Web 应用程序。我们第一次决定开始在应用程序中编写测试。

我们将使用 Junit、Mockito 和 Hamcrest 来编写测试。

由于这是我们第一次编写测试,而且我们的团队中也没有任何人具有编写测试的经验,因此我们正在寻找一些可以作为参考的示例应用程序。

我们已经浏览了几篇关于如何使用 junit 等编写测试的网络和红色文章。编写测试等时的最佳实践是什么,但到目前为止还没有看到任何实际应用。

我们不想开始编写糟糕的测试。

请帮忙。

【问题讨论】:

  • 无论您多么努力,您都不会从第一天起就编写出完美的测试。这将是您团队的学习曲线。一个建议是,您可以在开始编写某些测试时使用codereview.stackexchange.com 来获取有关您的一些测试的反馈。唯一的危险是 SE 社区包含的意见至少与用户一样多。

标签: spring-mvc junit4 mockito hamcrest


【解决方案1】:

到目前为止,这还不是最终列表,而是根据我的经验提出的一些建议

  1. 真正尝试测试单元,尤其是因为您使用的是 JUnit(例如,与 testNG 相对)。这意味着,如果您发现测试中需要一些运行顺序,那么您不是在测试单元,而是在测试集成或功能

  2. 与 #1 相关,我强烈建议您使用模拟库,您似乎也这样做了。我,我使用Mockito,它使用起来非常简单,并且测试结果非常易读。你需要这个的原因是任何合理的类都依赖于其他类(如果不是顺便说一句,你的类可能不是很有凝聚力)或外部资源(数据库等),因为在单元测试中你应该只测试一个类一次,您需要模拟其他未测试的类。

  3. 可测试性设计。这很棘手,因为我认为您不应该仅仅为了测试而公开(即使 public)方法,但有时您可能需要使一些私有方法受到包保护,以便单元测试可以调用他们直接。当您的方法执行您不想在测试环境中执行的事情(例如创建文件)时,这非常有用,因此您可以将这些特定部分分成单独的方法,然后您可以在测试中避免使用这些方法。当某个方法不应该在单元测试之外使用时,请确保在 javadoc 中添加注释

  4. 尽量避免在您的工作方法中创建/打开资源。例如,不要使用 File 参数,然后在方法中打开并创建 InputStream,而是直接传递 InputStream。这样,当您测试时,您可以传递内存流。或者以更一般的方式,dependency injection 非常适合单元测试。每次您在方法中调用 new 时,可能会使您的单元测试更难运行和/或断言

  5. 如果您注意到要为某个方法运行测试,您需要首先调用许多外部方法来配置被测单元的状态,那么您最好进行一些重构。这很好地表明了高耦合。关于单元测试,这是我最喜欢的事情之一,为您的课程创建第二个用户这一事实有助于您仔细检查您的设计。

当然,很多人不会同意其中的部分或全部,对于那些人,不要对自己保密,对这个答案发表评论,以便附近有另一个 POV。对我也有帮助

【讨论】:

    【解决方案2】:

    我也推荐这本书,它有很多好的实践和味道,可以帮助你在单元测试中找到不好的实践。

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-13
      • 2016-04-30
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多