2014-09-29 9 views
1

Я хочу добавить некоторый общий код (например, зарегистрировать имя теста для регистрации) на мои тесты тестирования через AOP. Ниже мой Аспект & тестовый код:TestNG и Spring AOP

@Aspect 
@Component 
public class TestAspect { 
... 
@Around(value = "execution(* *(..)) && @annotation(org.testng.annotations.Test)") 
public Object test(@NotNull final ProceedingJoinPoint pjp) { 
... 
}} 


@ContextConfiguration(classes = { mysample.SpringTestConfigurator.class }) 
@WebAppConfiguration 
public class GlobalTest extends AbstractTestNGSpringContextTests { 
... 
@Test(enabled = true, priority = 1) 
public void testOS() { 
... 
}} 

Но аспект не называется. В чем проблема ?

+0

, пожалуйста, поделитесь своим SpringTestConfigurator. Вы также можете включить весенние журналы, чтобы увидеть, обрабатывает ли он что-либо, связанное с аспектами. – freakman

+0

Конфигуратор SpringTest настраивает различные параметры, такие как LDAP и свойства. Единственная релевантная конфигурация АОП здесь - @EnableAspectJAutoProxy. Странно то, что другие аспекты работают так, как ожидалось, мне кажется, что AOP не применяется только к тестовым методам, а относится к методам вызываемых сервисов. Как включить подробные весенние журналы? – kulatamicuda

+0

зависит от использования logback.xml или log4j.properties. В последнем случае попробуйте добавить log4j.logger.org.springframework = запись DEBUG – freakman

ответ

1

Я не пользователь Spring, но я знаю, что Spring AOP способен перехватывать методы весенних бобах, как описано в Spring documentation. Поэтому, если ваш тестовый класс не является Spring Bean, он не будет работать. С полным AspectJ это было бы.

Теперь у вас есть два варианта: либо сделать свой тест Spring Bean (что означает, что сам тест нуждается в инфраструктуре Spring для работы, что не так приятно), или вы используете AspectJ для перехвата методов тестирования. Я бы рекомендовал последнее, но - ваш код, ваше решение. :-)