Тестирование Grails Controller - Проблемы с динамическими методами - PullRequest
1 голос
/ 08 сентября 2010

Я запускаю несколько старых (но, как мне сказали, действительных) тестов на устаревшем приложении и замечаю, что многие из них не работают.Сообщение об ошибке обычно звучит так: «Нет подписи метода для какой-то димамный метод »

После использования mockDomain мне удалось решить эту проблему.Однако я не могу понять, как тестировать контроллеры, которые создают объекты внутри.

Например, я создал образец контроллера (пропущен оператор импорта)

package com.tmp
class DummyController2 {

    def index = { }

    def createObject={
        def emp= new Emp(name:'name',description:'description')

        if (emp.validate()){
          render 'OK'
        }
        else{
          render 'FAIL'
        }
    }
}

А затем образец controllerTest

package com.tmp
class DummyController2Tests extends ControllerUnitTestCase{

  DummyController2 controller

  public void setUp(){
    super.setUp()
    controller = new DummyController2()
  }

  public DummyController2Tests(){
         super(DummyController2Tests)
  }
  public void tearDown(){
    super.tearDown()
  }

  void testCreateObject(){
    assertEquals 'OK',controller.createObject()
  }
}

Теперь, когда я запускаю этот тест, я получаю

groovy.lang.MissingMethodException: Нет сигнатуры метода: Emp.validate () применим для типов аргументов:() значения: []

Есть ли обходной путь?Добавление mockDomain операторов внутри контроллера кажется очень навязчивым и неправильным .Может быть, просто я использую старый Grails (1.2.1)?

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

1 Ответ

1 голос
/ 08 сентября 2010

Ваш класс домена не является поддельным. Добавить в setUp ():

mockDomain Emp
...