何时进行单元测试以及何时进行集成测试

时间:2011-10-12 02:08:32

标签: unit-testing grails integration-testing

我是一般的测试新手,正在开发Grails应用程序。

我想写一个测试,说“当调用此动作时,返回正确的视图”。我不知道如何决定是否应该将这样的东西作为单元测试或集成测试。两种测试都会告诉我我想要什么 - 我该如何决定?

4 个答案:

答案 0 :(得分:5)

集成测试的一个问题是它们的速度。对我来说,集成测试需要15秒以上才能启动。在那个时候,某些事情确实失去了思想的焦点。

我更喜欢使用不超过2秒开始的单元测试,并且可以在15秒内运行几次。尤其是mockDomain().,特别是Grails 2.0 implementing criteria and named queries in unit tests

单元测试的另一个论点是它们会强制您解耦代码。集成测试总是诱使您只依赖于现有和初始化的其他组件。

答案 1 :(得分:4)

From Grails Docs section 9.1

  

单元测试是“单位”级别的测试。换句话说,你是   测试单个方法或代码块而不考虑   周边基础设施在Grails中,你需要具有特殊性   意识到单元测试和集成测试之间的区别,因为在   单元测试Grails不会注入任何存在的动态方法   在集成测试期间和运行时。

From Grails Docs section 9.2

  

集成测试与单元测试的不同之处在于您具有完全访问权限   测试中的Grails环境。 Grails将使用   内存中的HSQLDB数据库用于集成测试并清除所有内容   每次测试之间来自数据库的数据。

这意味着单元测试与Grails环境完全隔离,而集成测试则不是。根据{{​​3}}的作者Scott Davis,只能编写集成测试...

  

单元与集成测试

     

正如我之前提到的,Grails支持两种基本类型的测试:unit   和整合。这两者之间没有语法差异 -   两者都使用相同的断言编写为GroovyTestCase。该   区别在于语义。单元测试用于测试课程   隔离,而集成测试允许您测试类   在一个完整的,运行的环境中。

     

坦率地说,如果你想把你所有的Grails测试写成   集成测试,这对我来说没问题。所有的Grails   create- *命令生成相应的集成测试,所以大多数   人们只是使用已有的东西。正如你所看到的那样   那一刻,你要测试的大多数东西需要完整   无论如何要启动和运行环境,所以集成测试是一个   非常好的默认值。如果你有非核心Grails课程   喜欢测试,单元测试非常好。

答案 2 :(得分:0)

首先阅读grails指南http://grails.org/doc/latest/guide/9.%20Testing.html

的这一章

它讨论了测试控制器和获得控制器响应的能力,如下所示: controller.response.contentAsString

现在决定哪种测试更多的是艺术而不是科学。我更喜欢单元测试,因为它们运行得更快:)

答案 3 :(得分:0)

这是一个非常有趣且具有挑战性的问题,但事实上,这实际上取决于你究竟在测试什么。

进行以下测试:“将书籍保存到数据库”。提示在说明中。我们说我们需要一本书,我们需要一个数据库,因此在这种情况下,单元测试不会,因为我们需要集成数据库。

我的建议是写下完整的测试说明并像上面那样将其分解。它将为您提供帮助您决定的提示。

使用spock可以更容易地使用字符串作为测试名称。