我是一般的测试新手,正在开发Grails应用程序。
我想写一个测试,说“当调用此动作时,返回正确的视图”。我不知道如何决定是否应该将这样的东西作为单元测试或集成测试。两种测试都会告诉我我想要什么 - 我该如何决定?
答案 0 :(得分:5)
集成测试的一个问题是它们的速度。对我来说,集成测试需要15秒以上才能启动。在那个时候,某些事情确实失去了思想的焦点。
我更喜欢使用不超过2秒开始的单元测试,并且可以在15秒内运行几次。尤其是mockDomain().
,特别是Grails 2.0 implementing criteria and named queries in unit tests。
单元测试的另一个论点是它们会强制您解耦代码。集成测试总是诱使您只依赖于现有和初始化的其他组件。
答案 1 :(得分:4)
单元测试是“单位”级别的测试。换句话说,你是 测试单个方法或代码块而不考虑 周边基础设施在Grails中,你需要具有特殊性 意识到单元测试和集成测试之间的区别,因为在 单元测试Grails不会注入任何存在的动态方法 在集成测试期间和运行时。
集成测试与单元测试的不同之处在于您具有完全访问权限 测试中的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可以更容易地使用字符串作为测试名称。