2016-02-23 1 views
0

У меня были некоторые модульные тесты для слоя DAO приложения Spring 4 MVC. Затем я добавил Spring Security к определенным методам в моих контроллерах, и DAO они используют.Как я могу протестировать метод DAO Spring 4 с функцией Spring Security?

Я выяснил, как сделать аннотацию @WithMockUser в тестах контроллера, но я был в тупике на тестах DAO. Исключение я получаю на каждом тесте дао является:

java.lang.IllegalStateException: Failed to load ApplicationContext 
.... 
Caused by: java.lang.IllegalArgumentException: An AuthenticationManager is required 

У меня есть эти annoations в начале DaoTest:

@TestExecutionListeners({ WithSecurityContextTestExecutionListener.class }) 
@ContextConfiguration(classes = DaoConfig.class) 

@ContextConfiguration такой же, как и в настоящем коде; У меня есть предложения, чтобы сделать его другим, но ничего конкретного. Как я это распутываю? Я также надеюсь, что есть способ сделать это, не используя классы org.springframework.web. * Или org.springframework.test.web. *, Так как это должно быть «под» всего веб-уровня.

ответ

0

В общем, не рекомендуется проверять слишком много вещей одновременно. С помощью единичного теста вы хотите проверить только одно и только одно. Мой совет заключался бы в том, чтобы не загружать весеннюю безопасность вообще, когда выполняются ваши модульные тесты DAO. Вы должны иметь возможность сделать ваш тестовый класс подразделения DAO расширением своего класса AbstractTest, который загружает отдельный файл applicationContext-test.xml или Java Config, который вообще не включает Spring Security. Это должно позволить вашим модульным тестам не пробивать какой-либо уровень безопасности, на самом деле блочный тест не должен заботиться. Если, то есть, вы на самом деле пытаетесь интегрировать тестирование. Это будет совсем другая ситуация ... Надеюсь, это поможет.

+0

На данный момент наша команда согласилась переместить Spring Security из уровня DAO и переместить его обратно на уровни контроллера и служб. Я думаю, что это лучшая архитектура, чтобы DAO не беспокоиться о том, какой пользователь может называть тот метод, который, кстати, упрощает тестирование. – sockmonk