Модульное тестирование домена Grails - mockFor () - PullRequest
0 голосов
/ 31 июля 2009

Это класс домена:

class Registration {

  String email
  String generatedKey

  def beforeInsert = {
      String newToken = GlobalHelper.getRandomString()
      generatedKey = newToken
  }
}

и это соответствующая часть модульного теста:

    def c = mockFor(GlobalHelper)
    c.demand.static.getRandomString {-> return "nestoABC" }
    c.createMock()
    reg.beforeInsert()

При запуске теста я получаю эту ошибку:


Нет такого свойства: GlobalHelper для класса: RegistrationTests

groovy.lang.MissingPropertyException: Нет такого свойства: GlobalHelper для класса: RegistrationTests at RegistrationTests.testConstraints (RegistrationTests.groovy: 57)


Класс GlobalHelper находится в исходной папке Groovy, а упомянутая строка 57 - это строка с методом mockFor ().

Grails Документы по тестированию не очень помогли в этом вопросе ...

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

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 04 августа 2009

Какую версию Grails вы используете?

При использовании Grails 1.1.1 следующий тест работает с вашим доменом Registration, как указано выше. Это должно работать на Grails 1.1+ и Grails 1.0.x с плагином тестирования.

Вы хотите убедиться, что ваш модульный тест продлен GrailsUnitTestCase. Я совершал эту ошибку несколько раз.

import grails.test.*

class RegistrationTests extends GrailsUnitTestCase {

    void testBeforeInsert() {
        def reg = new Registration()
        reg.generatedKey = "preBeforeInsert"
        String randomString = "nestoABC"

        def c = mockFor(GlobalHelper)
        c.demand.static.getRandomString {-> return randomString }

        assertNotSame(reg.generatedKey, randomString)
        reg.beforeInsert()
        assertSame(reg.generatedKey, randomString)

        c.verify() //Verify the demands
    }
}
0 голосов
/ 24 марта 2011

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

def c = mockFor(GlobalHelper)

станет

def c = mockFor(com.example.fully.qualified.GlobalHelper)
0 голосов
/ 31 июля 2009

В соответствии с этим документом, в настоящее время не работают ложные статические методы.

...