Grails уникальный тест не проходит? - PullRequest
2 голосов
/ 06 апреля 2011

Я пытаюсь создать тест в Grails, чтобы убедиться, что действительно работает уникальное ограничение: 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 extends 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 возвращают true для .validate (), хотя я говорю им обоим иметь одинаковый siteId ...

У меня такое ощущение, что это как-то связано с тем, что они не помещаются в базу данных, а просто хранятся в памяти?

Вся помощь очень ценится, спасибо. -Asaf

Ответы [ 2 ]

5 голосов
/ 06 апреля 2011

Уникальность будет на уровне базы данных. Вы никогда не сохраняете домен, поэтому что касается upayConfigTwo, он уникален. Вам нужно будет сделать обычную имитацию и вызвать метод save () для upayConfigOne.

1 голос
/ 07 апреля 2011

Спасибо. Я посмотрел этот веб-сайт: 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...