Я использую защиту в приложении grail. Версия Grails: 2.2.1 shiro: 1.2.0Как насмехаться с методом Siro accessControl() в тестовом примере блока Grails
У меня возникла проблема с написанием тестового примера блока Grails для контроллера с включенным фильтром. Когда тестовый файл работает без фильтров, он работает нормально, если он работает с фильтрами, тогда он не работает для метода accessControl(), который не найден в контроллере. Я не знаю, как сделать api Shiro видимым при запуске тестового примера. Я ссылался на ссылку на тестовый блок siro unit http://shiro.apache.org/testing.html, но я не смог получить информацию о accessControl(). Я дал образец кода, как выглядит мои классы и тестовый пример как
MyController.groovy
def create() {
// getting request parameters and validation
String emailId = params.emailId
def ret = myService.createUser(emailId)
return ret
}
MyControllerFilters.groovy
def filters = {
loginCheck(controller: 'user') {
before = {
//do some business checks
// Access control by convention.
accessControl() // This is a dynamic method injected by ShiroGrailsPlugin to FilterConfig, but this is not visible during the test case.
}
}
MyControllerTests.groovy
@TestFor(MyController)
@Mock(MyControllerFilters)
class MyControllerTests {
@Before
void setup() {
// initializing some variables
}
void testCreateUserWithFilter() {
request.accessAllowed = true
withFilters(action:"create") {
controller.create()
}
assert response.message == "success"
}
}
Этот метод accessControl() фактически не находится внутри контроллера, который вводится контроллеру во время выполнения. Этот метод принадлежит ShiroGrailsPlugin. Во время модульного теста этот метод не отображается внутри контроллера. Я не знаю, как вводить ShiroGrailsPlugin или какой-то макет этого метода для модульного теста – user2001627