【问题标题】:Grails unique test fails?Grails独特的测试失败了吗?
【发布时间】:2011-04-05 21:00:21
【问题描述】:

我正在尝试在 grails 中创建一个测试,以确保 unique:true 约束确实有效,这是我的类和测试文件:

包 edu.drexel.goodwin.events.domain

类 UpayConfig {

String name
String siteId
String postingCode

static constraints = {
    name(blank:false, maxSize:50)
    siteId(blank:false, unique:true)
    postingCode(blank:false)
}

}

包 edu.drexel.goodwin.events.domain

导入 grails.test.*

UpayConfigTests 类扩展 GrailsUnitTestCase { 受保护的无效设置(){ 超级设置() }

protected void tearDown() {
    super.tearDown()
}

void testCleanUpayConfigValidates() {
    mockForConstraintsTests UpayConfig
    def cleanUpayConfig = create()
    assertTrue cleanUpayConfig.validate()
}

void testUpayConfigSiteIdMustBeUnique() {
    mockForConstraintsTests UpayConfig
    def upayConfigOne = create()
    def upayConfigTwo = create()
    assertFalse upayConfigOne.validate()
    assertFalse upayConfigTwo.validate()

    upayConfigTwo.siteId = '81'
    assertTrue upayConfigOne.validate()
    assertTrue upayConfigTwo.validate()
}

UpayConfig create() {
    def upayConfig = new UpayConfig(
                    siteId: '82',
                    name: 'SMT - Workshops',
                    postingCode: '6'
            )
}

}

但是第二次测试失败了,upayConfig 变量对于 .validate() 都返回 true,即使我告诉它们都具有相同的 siteId...

我觉得这与这些没有被放入数据库,只是存储在内存中的事实有关?

非常感谢所有帮助,谢谢。 -阿萨夫

【问题讨论】:

    标签: testing grails unique


    【解决方案1】:

    唯一性将在数据库级别。您永远不会保存域,因此就 upayConfigTwo 而言,它是独一无二的。你需要做一个常规的模拟,并在upayConfigOne上实际调用save()。

    【讨论】:

      【解决方案2】:

      谢谢。我查看了这个网站:http://www.ibm.com/developerworks/java/library/j-grails10209/index.html,它有一个名为“使用 mockForConstraintsTests() 测试唯一约束”的部分,所以在它之后我修改了我的测试如下并且它正确通过了:

      void testUpayConfigSiteIdMustBeUnique() {
          def upayConfigOne = create()
          mockForConstraintsTests(UpayConfig, [upayConfigOne])
          def upayConfigTwo = create()
          assertFalse upayConfigTwo.validate()
          assertEquals "unique", upayConfigTwo.errors["siteId"]
      
          upayConfigTwo.siteId = '81'
          assertTrue upayConfigTwo.validate()
      }
      

      感谢您的帮助, -阿萨夫

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多