Grails mockDomain сохранить не сохранить - PullRequest
4 голосов
/ 05 августа 2011

Я пишу модульный тест для некоторых простых методов.Проблема, с которой я столкнулся, заключается в том, что «save» не работает для моего объекта домена, даже если домен должен быть поддельным.При вызове validate для объекта домена он возвращается как true.Я даже окружил объект try / catch, чтобы убедиться, что он не выдает никаких странных ошибок, а это не так.Код ниже для вызова и проверки.

void test()
{
    mockDomain(MyDomain)
    Map map1= ["asdf":" "]
    Map map2 = ["asdf":123]
    InputObject input = new InputObject()
            input.setForeignId("1") //not a constraint
    input.setMap1(map1)
    input.setMap2(map2 )
    service.methodUnderTest(profile)
    List list = MyDomain.getAll()
    assertEquals 1, l.size() //FAILS
}

def persistPublishGuids(InputObject input)
{
    try{
    HashMap map1 = input.map1
    for ( e in map1 )
    {
        String key= e.getKey()
        String value = e.value
        long size = input.map2.get(key)
        MyDomain domain = new MyDomain (id:guid, field1:value, field2:input.foreignId, field3:size)
        domain.save()
    }
    } catch(ex)
    {
        ex.printStackTrace()
    }
}

Ответы [ 2 ]

4 голосов
/ 14 марта 2012

Я бы также рекомендовал установить флаги flush и failOnError в true при сохранении объектов домена в тестах. flush: true гарантирует, что объект будет сохранен немедленно. Без failonError ошибки проверки будут означать, что объект НЕ сохранен, и это может быть легко пропущено.

domainObject.save(flush:true, failOnError: true)

Также стоит рассмотреть возможность установки флага проверки в значение false, если вы не хотите устанавливать базовые данные для всех полей в тесте

domainObject.save(validate: false)

См. Документацию по сохранению объекта домена Grails для полной информации

1 голос
/ 08 августа 2011

Проблема заключалась в том, что приложение grails нужно было очистить и перестроить проект.

...