В одном из моих модульных тестов у меня возникли некоторые трудности с выполнением смоделированного метода. У меня есть следующий тестовый код:
void testExample() {
def mockICFService = new MockFor(ICFService)
...
//Mock the methods
controller.metaClass.icfList = { def person ->
println "icfList"
return [new IC(conceptId:'12345')]
}
mockICFService.demand.getAllIC(1..1) { def id, def withHist, def appId ->
println "mocking service"
return new Person()
}
...
def model = controller.detail()
}
Внутри деталей в моем классе контроллеров я создаю Person с помощью getFSllvice ICFService (). Эта часть работает правильно. Позже в функции, однако, есть вызов icfList (который определен в контроллере). С помощью println я определил, что вызов все еще выполняется, хотя он возвращает пустой массив. Я полагаю, что это потому, что массив заполняется на основе данных в servletContext, но в модульном тестировании нет доступа к нему (поэтому я пытаюсь его смоделировать).
Кто-нибудь знает, как заставить тест использовать смоделированную версию controller.icfList вместо вызова фактического метода в контроллере?