【问题标题】:Grails : Spock : Unit testing GORM domain class hooksGrails : Spock : 单元测试 GORM 域类钩子
【发布时间】:2015-11-25 07:58:09
【问题描述】:

通常我最终会通过为约束和任何自定义方法(由我们在应用程序中创建)编写它们来为域编写测试用例,因为我们知道我们不应该进行明显的测试。

但是当我们开始使用覆盖插件时,我们发现我们的领域代码行没有被完全覆盖,这是由于我们从未编写过测试用例的 gorm hooks(onInsert, beforeUpdate)。

有什么方法可以测试这些。一种看似显而易见但不适合的可能方法是在这些钩子中调用另一个方法(包含之前在钩子中的所有代码)并仅测试该方法,而不必担心钩子。

任何解决方案...

编辑

我要进行单元测试的域中的示例代码:

class TestDomain{
   String activationDate
   def beforeInsert() {
      this.activationDate = (this.activationDate) ?: new Date()//first login date would come here though
      encodePassword()
   }
}

如何在插入之前进行单元测试,否则我最终会编写集成测试用例?

【问题讨论】:

  • 也许您可以发布一个代码示例和您各自的单元测试?
  • @kazanaki ,请看我上面的编辑。
  • 好的。但是单元测试在哪里?你想测试什么? beforeInsert 方法本身,还是 Grails 在您期望它被调用时调用它的事实?
  • 我认为 Grails 会在单元测试和集成测试中调用这些方法。

标签: unit-testing grails grails-orm spock


【解决方案1】:

也许像这样的单元测试:

import grails.test.mixin.TestFor

@TestFor(TestDomain)
class TestDomainSpec extends Specification {
    def "test beforeSave"() {
        given:
            mockForConstraintsTests(TestDomain)
        when:
            def testDomain = new TestDomain().save(flush:true)
        then:
            testDomain.activationDate != null
    }
}

【讨论】:

    猜你喜欢
    • 2011-09-14
    • 1970-01-01
    • 2014-06-21
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    相关资源
    最近更新 更多