Использование AspectJ для замены сторонних объектов на макеты в модульных тестах - PullRequest
1 голос
/ 25 января 2011

Я пишу клиент веб-служб, используя Spring-WS и класс WebServiceTemplate. Внизу в чашах класса WebServiceTemplate создается WebServiceConnection. WebServiceConnection.send используется для фактической отправки сообщения. Я хотел бы перехватить вызов WebServiceConnection.send и заменить его некоторой логикой, которая проверяет объект, переданный в WebServiceConnetion.send.

Меня поражает, что это было бы хорошим местом для использования Аспектов. Тем не менее, я не уверен, как можно запустить аспекты только тогда, когда я выполняю модульные тесты. Я также хотел бы иметь различные аспекты, основанные на том, какие тесты я выполняю.

У кого-нибудь есть идеи, как это сделать?

1 Ответ

2 голосов
/ 25 января 2011

Вы можете использовать Runtime Weaving с AspectJ. Вам не нужно компилировать аспекты в ваше приложение, достаточно их включить при тестировании.

Поскольку при использовании AspectJ в пути к классам должен быть META-INF / aop.xml, а JVM необходимо запустить с помощью -agent: myPath / aspectjweaver.jar, у вас есть инструменты для использования AspectJ только при тестировании.

О, и если вы используете AspectJ для компиляции своего приложения, вы все равно можете использовать дополнительные аспекты при тестировании, если вы комбинируете время выполнения и время компиляции.

...