Дополнительно
Тестирование аспекта Spring AOP
При написании аспектов, как я могу проверить, что они соответствуют друг другу и что они вызываются, когда я этого хочу?
Я использую декларации @Aspect
в Spring 2.5.6.
Меня не волнует функциональность, которая'извлекается и тестируется иначе.
12
2
Здесь нужно проверить три разных вещи:
Чтобы проверить указатели, вы можете определить несколько тестовых типов, которые имеют те же сигнатуры пакетов/типов/методов, что и предполагаемые "реальные" цели, затем определить тестовый совет против указателей, чтобы убедиться, что они совпадают (также определите несколько типов, которые не должны совпадать, чтобы убедиться, что указатели не слишком либеральны). Обычно я делаю это, определяя совет для выполнения обратного вызова метода в тестовой цели, устанавливая флаг, а затем утверждая, что флаг был установлен.
Проверить совет сложнее. Я обычно делегирую все тело совета обычному методу, а затем сосредотачиваюсь на тестировании метода, а не совета.
Если вы сделали это, то единственная недостающая часть - это то, что ваш совет применяется к правильным точкам и действительно вызывает методы. Если вы обеспокоены тем, что это может быть проблемой, вы можете сделать это, создав другой аспект, который соответствует выполнению вашего совета и устанавливает флаг, чтобы показать, что ожидаемый делегированный метод был вызван аспектом, и переопределить метод, чтобы он ничего не делал.
В итоге я создал нечто, что является своего рода интеграционным тестом, следующим образом:
Создал JUnit-тест с поддержкой Spring
Создана конфигурация Spring для этого теста, которая:
В модульном тесте я получаю фиктивный сервис и вызываю его методы