AOP AfterThrowing在单元测试中调用的建议

时间:2014-01-06 11:29:04

标签: java unit-testing spring-aop

说明

我有一个单元测试,我不希望加载AOP。我没有在任何单元测试代码中加载AOP。未模拟的类没有自动装配和/或使用的任何AOP / bean /组件。

在运行单元测试时,代码假定抛出一个名为FrameworkException的自定义异常。

然而,AOP捕获异常并运行AfterThrowing建议。我不希望在单元测试中使用它。

有人可以帮忙吗?

问题

为什么仍然会调用ExceptionAspect afterThrowing()建议?它之前没有被称为。

怀疑

模拟代码是否仍然使用任何现有功能进行实例化?

尝试的决议
- 我尝试加载AnnotationConfigApplicationContext,它加载一个空的配置类。这似乎不起作用。

代码示例 - 单元测试

@Test
public void processRequest_WithRequestParameterNull_ExceptionExpected()
{
    try
    {
        RequestWrapper requestMock = Mockito.mock(RequestWrapper.class);
        Auditor auditorMock = Mockito.mock(Auditor.class);
        CoreWrapper coreMock = Mockito.mock(CoreWrapper.class);

        RequestAssessmentStatusHandler handler = new RequestAssessmentStatusHandler(requestMock, auditorMock,
                coreMock);
        handler.processRequest(null);
        fail("processRequest_WithRequestParameterNull_ExceptionExpected failed.");
    }
    catch (FrameworkException e)
    {
        assertEquals(EventIds.INVALID_FRAMEWORK_PARAMETER, e.getEventId());
    }
    catch (Exception e)
    {
        fail("processRequest_WithRequestParameterNull_ExceptionExpected unhandled exception: "
                + e.getStackTrace().toString());
    }
}

代码示例 - AfterThrowing建议

@Component
@Aspect
public class ExceptionAspect
{
    @AfterThrowing(pointcut = "execution(* *(..))", throwing = "exception")
    public void afterThrowing(JoinPoint joinPoint, Exception exception) throws Exception
    {
        // Do things here.
    }
}

0 个答案:

没有答案