Grails独特的测试失败了吗?

时间:2011-04-05 21:00:21

标签: testing grails unique

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

package 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)
}

}

package edu.drexel.goodwin.events.domain

import grails.test。*

类UpayConfigTests扩展GrailsUnitTestCase {     protected void setUp(){         super.setUp()     }

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 ......

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

非常感谢所有帮助,谢谢。 -Asaf

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

谢谢。我查了一下这个网站: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()
}

感谢您的帮助, -Asaf