В демонстрационных целях я установил приложение свежего грааля с этими файлами:
class HalloController {
def index() {
String heading = request.getAttribute("heading")
render "${heading}"
}
}
class HalloInterceptor {
boolean before() {
request.setAttribute("heading", "halloechen") // *** set breakpoint here***
true
}
boolean after() { true }
void afterView() {
// no-op
}
}
Когда я попал на http://localhost:8080/hallo, "halloechen" печатается, так как это было установлено какатрибут запроса в методе перехватчиков before()
, как я и хотел.Теперь я хочу провести модульный тест для перехватчика:
class HalloInterceptorSpec extends Specification implements InterceptorUnitTest<HalloInterceptor> {
def setup() {
}
def cleanup() {
}
void "Test hallo interceptor matching"() {
when:"A request matches the interceptor"
withRequest(controller:"hallo")
then:"The interceptor does match"
interceptor.doesMatch() && request.getAttribute("heading") == "halloechen"
}
}
Этот тест не пройден, так как атрибут heading
не установлен на запрос (который в любом случае является поддельным).Фактически, при запуске модульного теста кажется, что перехватчик даже не вызывается.Я установил точку останова в методе before()
, и при отладке теста я никогда не доберусь до него.Что странно, потому что я ожидаю, что тест Перехватчика вызовет хотя бы перехватчик.Я знаю, что могу переписать тест, как описано здесь , но я хочу сказать, что перехватчик вообще не вызывается.Это правильно?Другое дело: вызов getModel()
в тесте всегда возвращает null
.Как мне получить модель в моем тесте?