2010-05-04 3 views
0

Привет (вопрос, возможно, глупый вопрос)Grails UnitTest

Как можно получить класс домена из базы данных в тесте?

class PollServiceTests extends GrailsUnitTestCase { 
    Integer id = 1 

    void testSomething() { 
     Teacher teacher1 = Teacher.get(id) 
     assert teacher1 != null 
    } 
} 

Я всегда получаю нулевой или

Нет подписи метода: cz.jak.Teacher.get() не применим для типов аргументов: (java.lang.Integer) значения: [1]

Большое спасибо Том

+0

раз вы добавили mockDomain (Teacker), я надеюсь, ваш тест потерпит неудачу, как teacher1 == NULL :-( – Armand

ответ

5

Grails модульные тесты не имеют переменного тока выйдите в среду Grails, поэтому вам нужно высмеять ваши объекты домена.

void testSomething() { 
    mockDomain(Teacher) 
    def teacher = new Teacher(...) 
    assertNotNull teacher.save(insert:true) 
    assertNotNull country.countryId 
    def found = Teacher.get(country.countryId) 
} 
+0

Ллойда, могли бы Grails UnitTest получить доступ к тестовой базе данных для извлечения данных базы данных через класс домена статического метод (список, счет и т. д.), как это делает традиционный unittest (например, java junit test). – ricky

0

Существует необязательный второй параметр для mockDomain, который принимает список. Если вы перейдете в список, методы получения, списка, сохранения, обновления и удаления будут работать над этими объектами в Списке (если они есть).

void testSomething() { 
    def teachers = [] 
    for (i in 0..9) { 
     teachers.add(new Teacher(name: "teacher${it}")) 
    } 
    mockDomain Teacher, data 

    Teacher t2 = Teacher.get(2) 
    assertEquals "teacher2", t2.name 
}