Как макетировать классы в папке 'src' в Grails (модульное тестирование) - PullRequest
3 голосов
/ 26 апреля 2011

Я пытаюсь написать несколько модульных тестов для службы в моем приложении Grails.Служба MyService использует класс, расположенный в $ APP-ROOT / src / groovy / и называемый MyHelperClass.

В модульном тесте для MyService я пытаюсь создать макет для MyHelperClass, например так:

def myHelperClassMock = mockFor(MyHelperClass)
def myService = new MyService()
myService.myHelperClass = myHelperClassMock.createMock()

Это выдает ошибку:

Error casting map to com.mycompany.myproject.MyHelperClass, Reason: Could not find matching constructor for: com.mycompany.myproject.MyHelperClass()
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Error casting map to com.mycompany.myproject.MyHelperClass, Reason: Could not find matching constructor for: com.mycompany.myproject.MyHelperClass()
    at grails.test.GrailsMock.createMock(GrailsMock.groovy:91)
    at grails.test.GrailsMock$createMock.call(Unknown Source)
    at com.mycompany.myproject.MyServiceTests.testSomething(MyServiceTests.groovy:17)

Это, кажется, происходит только для классов в src / и, кажется, работает нормально для классов в grails-app / services, например.Любая идея, как я могу получить это, чтобы увидеть классы в src /?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 14 апреля 2013

Код не указывает его, но createMock требует, чтобы у моделируемого класса был конструктор по умолчанию (без аргументов).

Все нормальные артефакты Grails в / grails-app имеют их, в то время как некоторые другие классы в / src могут не иметь их.

Добавление конструктора по умолчанию исправило ошибку, когда я столкнулся с этим.

Также см. https://groups.google.com/forum/?fromgroups=#!topic/groovymn/u2Ng_RM224A для соответствующего обсуждения этого.

2 голосов
/ 26 апреля 2011

Этот ответ должен дать вам необходимую информацию.

Конструкторы в Grails

...