Как мне издеваться над полями mocks в Grails 2.3.9?

#grails

#grails

Вопрос:

Я новичок в Grails / Groovy. Я написал сценарий или два в Groovy, но никогда не тестировал. Мой фон — Java.

Проект — это древняя часть тестового жгута, которую они хотят обновить для Java 8 и наших последних jars.

Я читал это: http://docs.grails.org/2.3.9/guide/testing.html … но я многого не понимаю. Тест, который я пытаюсь исправить, выдает ошибки, относящиеся к нулевой способности.

Тест выглядит так:

 @TestFor(SomethingController)
@Mock(Something)
class SomethingControllerTests {
...
    void testDelete() {
        controller.delete()
        assert flash.message != null
        assert response.redirectedUrl == '/somethingPills/list'

        response.reset()

        populateValidParams(params)

        def SomethingPills = new SomethingPills(params)

        def saveValueReturned = SomethingPills.save()

        assert saveValueReturned != null
        assert SomethingPills.count() == 1

        params.id = SomethingPills.id

        controller.delete()

        assert SomethingPills.count() == 0
        assert SomethingPills.get(somethingPills.id) == null
        assert response.redirectedUrl == '/somethingPills/list'
    }

}
  

В результате в assert saveValueReturned != null строке, указывающей на то, что сохранение было неудачным, выбрасывается исключение. Если я покопаюсь в Something макете во время выполнения отладки, я увижу, что все поля равны нулю, за исключением поля ошибок. В поле errors перечислены ошибки not-nullablle, относящиеся к нескольким полям. Очевидно, что мне нужно установить их в макете. Мне нужны подсказки о том, как это сделать.

Ответ №1:

Из вашего кода кажется, что SomethingPills — это класс домена Grails. Поскольку вы передаете параметры и пытаетесь сохранить, вам необходимо заполнить параметры значениями, необходимыми для сохранения SomethingPills, иначе SomethingPills выдаст ошибку ValidationException.

Возможно, populateValidParams(параметры) не заполняют параметры всеми свойствами, которые необходимы для сохранения SomethingPills.

Комментарии:

1. ДА. На самом деле метод populateValidParams пуст. Если я правильно понимаю, все, что мне нужно сделать, это заполнить его соответствующими значениями?

2. Хорошо, я пытался сделать это раньше, и это не сработало. Теперь я понимаю, почему. Существуют ограничения, которые необходимо соблюдать. Только что узнал о них.