2013-08-05 3 views
4

Я стараюсь быть хорошим программистом и настраивать модульные тесты для моего приложения Grails 2.2.3. Модульные тесты, которые используют введенный GORM метод .save(), по-видимому, не сохраняются в тестовой БД. Для примера, вот что один тест состоит из:Модульные тесты Grails, не распознающие .save() в классе домена

@TestFor(TermService) 
@Mock(Term) 
class TermServiceTests { 
    void testTermCount() { 
     def t = new Term(code: "201310").save(validate: false, flush: true, failOnError: true) 
     println "Printing Term: " + t.toString() 

     assert 1 == Term.count() // FAILS 
     assert service.isMainTerm(t) // FAILS 
    } 
} 

Я сделал println, что заканчивает печать Printing Term: null, то есть срок не сохранять и возвращать экземпляр Term. Первое утверждение неверно с Term.count(), возвращающимся 0.

Кто-нибудь знает, почему это может быть? У меня есть макет Term и TermService (через аннотацию TestFor, я считаю), поэтому я не совсем уверен, почему это не сработает. Благодаря!

Редактировать: Вот мой класс Term.

class Term { 

    Integer id 
    String code 
    String description 
    Date startDate 
    Date endDate 

    static mapping = { 
     // Legacy database mapping 
    } 

    static constraints = { 
     id blank: false 
     code maxSize: 6 
     description maxSize: 30 
     startDate() 
     endDate() 
    } 
} 
+1

установить 'Validate: true' увидеть, если вам не хватает каких-либо ограничений – Alidad

+0

Как' Term' выглядеть? – dmahapatro

+0

@Alidad Мне не хватает нескольких ограничений, но я думал, что установка 'validate: false' означает, что проверка не будет срабатывать при сохранении, поэтому мне не нужно заполнять все поля. @dmahapatro Я добавил термин к исходному сообщению. – grantmcconnaughey

ответ

8

Похоже id генератор assigned, так как вы уже упоминали об использовании унаследованной базы данных. Плюс id не привязан по умолчанию в классе домена (построение карты не будет работать для id). Так что, я думаю, вы должны в конечном итоге, используя, как показано ниже:

def t = new Term(code: "201310") 
t.id = 1 
t.save(...) 
Смежные вопросы