2014-12-02 7 views
0

У меня есть набор классов домена и контроллера, называемых Organization и OrganizationController соответственно.Отказывание доменных классов в Grails

THe OrganizationController имеет только один метод:

def index() { 
    def organizations = Organization.list() 
    [orgs: organizations] 
} 

Я пытался издеваться из класса домена 2 способами.

Первый способ использовал @Mock аннотацию, а также создание объектов и сохранение:

void "test index"() { 
    given: 
    new Organization(name: 'JIMJIM').save() 
    new Organization(name: 'ABC').save() 

    def expected = [org: [new Organization(name: 'JIMJIM'), 
        new Organization(name: 'ABC')]] 

    when: 
    def actual = controller.index() 

    then: 
    actual == expected 
} 

Это вызвало Oraganization.list вернуть пустой список. Фактические доходы [орг: []]

Я также попытался с помощью mockDomain:

void "test index"() { 
    given: 
     mockDomain(Organization, [new Organization(name: 'JIMJIM'), 
           new Organization(name: 'ABC') 
    ]) 

    def expected = [org: [new Organization(name: 'JIMJIM'), 
        new Organization(name: 'ABC')]] 

    when: 
    def actual = controller.index() 

    then: 
    actual == expected 
} 

Однако я до сих пор получил тот же результат. Почему мои классы домена не издеваются?

Мой тест украшения (OrganizationControllerSpec) заключается в следующем:

@TestFor(OrganizationController) 
@Mock(Organization) 
@TestMixin(DomainClassUnitTestMixin) 
class OrganizationControllerSpec extends Specification { 

Я использую Grails 2.3.8.

ответ

1

Первый фрагмент, кажется, хорошо, но ...

Прежде всего, были Organization объекты на самом деле создали? Предоставляются ли все обязательные поля? Пожалуйста, попробуйте использовать save(failOnError: true), чтобы убедиться.

Кроме того, в контроллере у вас есть orgs, в то время как вы используете org в тесте. Это всего лишь орфография?

Кроме того, если у вас нет equals метод, перезаписанный в классе Organization, объекты из базы данных не равны тем, которые вы создаете с помощью оператора new.

+0

Вы правы в этом! – monksy

Смежные вопросы