модульные тестовые примеры для весеннего аспекта, передав точку соединения?

У меня есть аспект spring aop, и у него есть метод, как показано ниже: это аспект, который будет вызываться перед конкретным методом.

public void someMethod(JoinPoint jp) {
        //Somelogic
    }

Мне нужно написать тестовый пример junit для этого. как я могу создать экземпляр и отправить параметры someMethod? я имею в виду, как я могу заполнить JoinPoint аргументами? как установить параметры в точке соединения и передать их? аспект настраивается в XML-файле контекста приложения.

Спасибо!


person user755806    schedule 08.04.2013    source источник


Ответы (2)


Я думаю, у вас есть несколько хороших вариантов здесь...

  1. JoinPoint — это интерфейс. Из-за этого вы должны иметь возможность создать свою собственную реализацию «заглушки», которая имеет ожидаемое поведение. В своем тесте создайте новый экземпляр этой заглушки и передайте его в метод someMethod.
  2. Используйте фиктивный фреймворк, чтобы смоделировать объект JoinPoint, и настройте ожидаемое поведение на макете. Это может показаться несколько странным, если вы не знакомы с фиктивными фреймворками в целом, поэтому я бы рекомендовал взглянуть на эту документацию на Mockito — популярный фреймворк для имитации.

Когда дело доходит до модульного тестирования, лучшая практика (по крайней мере, моя) предполагает, что тест всегда должен использовать какой-либо макет/заглушку (для элементов и переданных параметров), чтобы гарантировать, что модульный тест тестирует только модуль. Если бы вы использовали реализацию JoinPoint, которую использует Spring/AspectJ, вы также могли бы тестировать некоторую логику их реализации в вашей модульный тест. Если эти детали реализации изменятся в будущем, ваш тест может сломаться без каких-либо изменений кода с вашей стороны.

person nicholas.hauschild    schedule 08.04.2013

Я вник в это и обнаружил, что самый простой способ сделать это — создать несколько «фиктивных методов», к которым должен быть привязан аспект, затем вы можете просто вызывать эти методы в своих тестах и ​​делать утверждения относительно того, что делает аспект.

Сложно и очень много времени имитировать JoinPoint, поскольку вы обычно хотите получить доступ к большому количеству нативных вещей внутри него, например, к объектам отражения, которые объявлены окончательными и, следовательно, сложными для имитации.

person Alastair Knowles    schedule 25.03.2017