0

Я пишу тестовые примеры для проекта, который по-прежнему использует плагин Acegi (а не новый плагин Spring Core Security), и на данный момент мне удалось сделать то, что этот сайт (http://www.zorched.net/2008/09/01/grails-testing-acegi-security/)тестирование securityConfig mapping in grails + acegi

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

def list = { 
    // code for an "admin account" 
} 

def list_others = { 
    // code for other accounts 
} 

Теперь я сделать не проверку в контроллере зарегистрированный пользователь. Вместо этого, я это определено в SecurityConfig.groovy как:

security { 
    ... 
    requestMapString = """\ 
      /someController/list=ROLE_ADMIN 
      /someController/list_others=ROLE_OTHERS 
    """ 
    ... 
} 

Следовательно, если бы я был тест, который выглядел так:

void testTrial() { 
    // define here that otherUser has a role of ROLE_OTHERS 

    authenticate(otherUser, "other") // this calls the authenticate methode in the site I gave earlier 
    controller.list() 

    // I do an assertion here to check where this goes to 
} 

Дело в том, когда я делаю утверждение, конечно список скажет мне, что он пересылал list.gsp ... даже если пользователь «вошел в систему» ​​имеет роль ROLE_OTHERS, а не администратор.

Тем не менее, мне нужно, как проверить, к чему должен войти только вход в систему? В этом случае, учитывая, что вызов имеет значение * .list(), и у зарегистрированного пользователя есть роль ROLE_OTHERS, я должен был быть перенаправлен на страницу «denied».

Помощь? Благодаря!

ответ

1

Для этого вам понадобятся функциональные тесты. Модульные тесты - это просто класс Groovy или Java, а также некоторые издевательства. Нет никакого контекста приложения Spring, нет Hibernate, нет базы данных и, самое главное, для этого случая нет плагинов.

Тесты интеграции дают вам больше функциональности, но даже там запросы в основном моделируются, и поскольку нет контейнера, никаких фильтров не срабатывает. Spring Security (используемая плагином Acegi) основана на цепочке фильтров сервлетов. Поэтому, если вы хотите проверить правильность применения правил безопасности, вам понадобится работающий сервер, следовательно, функциональные тесты.

Есть несколько вариантов для функционального тестирования, наиболее популярными из которых являются WebTest: http://grails.org/plugin/webtest, Функциональное тестирование плагина: http://grails.org/plugin/functional-test, и плагин Selenium RC: http://grails.org/plugin/selenium-rc.

Последним является Geb: http://grails.org/plugin/geb. Руководство находится на http://geb.codehaus.org/, и об этом было недавно опубликовано сообщение в блоге: http://blog.springsource.com/2010/08/28/the-future-of-functional-web-testing/

+0

lolz, был боязлив, что это потребует функциональных тестов. в любом случае, я проверю их, спасибо! это помогает совсем немного :) – callie16

Смежные вопросы