Дразнить класс Aspect, вызываемый после того, как в Junit выброшено исключение - PullRequest
0 голосов
/ 27 марта 2020

У меня есть класс аспектов, как показано ниже -

public class TestAspect {

@AfterThrowing(pointcut = "execution(* *(..)) ", throwing = "testException")
public void afterThrowAdvice(TestException testException) throws Exception {
}
}

Теперь каждый раз, когда любой класс генерирует TestException, вызывается метод afterThrowAdvice TestAspect. Из модульных тестов, а также без использования пружинной конфигурации xmls, работающей как простой тест джунта. Как мне издеваться, чтобы ничего не делать, когда этот метод вызывается? Я попробовал в моем модульном тесте ниже, но это не будет работать. Правильно, потому что этот аспект не связан автоматически с классами, которые я тестирую. Какие-либо предложения? -

@Mock
private TestAspect testAspect

doNothing.when(testAspect).afterThrowAdvice(any(TestException.class));

1 Ответ

0 голосов
/ 28 марта 2020

Одним из способов достижения этого является использование опции @Profile.

При следующей настройке профиля компонент аспекта будет доступен только для профиля, отличного от test

@Component
@Aspect
@Profile("!test")
public class TestAspect {
    @AfterThrowing(pointcut = "execution(* *(..)) ", throwing = "testException")
    public void afterThrowAdvice(TestException testException) throws Exception {
        ...
    }
}

и после теста Junit запускаются тесты с профилем test, и здесь не создается никакого аспектного компонента

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestExConfig.class)
@ActiveProfiles("test")
public class TestService{

    @Autowired
    ServiceWithException service;

    @Test(expected = TestException.class)
    public void testExceptionMethod() throws TestException {
        service.testMethod();
    }
}

Надеюсь, это поможет

...