在junit测试期间忽略Aspectj

max*_*axx 6 spring aspectj

这是情况:

  1. 我们有类定义方面的类是方法A;
  2. 我们对这个方法进行了JUnit测试;

当我运行JUnit测试时,它也会激活Aspect.有什么想法在单元测试期间如何忽略Aspects?

我为我的Aspects分开了测试,它运行正常.所以在我的单元测试中,我想只测试methodA而没有任何附加方面.

我使用spring 3.0及其aspectj支持.

提前致谢.

此致,Max

Esp*_*pen 4

您可以禁用我假设您的 IDE 正在执行的编译时编织,并在单独的 AspectJ 测试中使用加载时编织。

要启用加载时编织,您必须提供 javaagent 作为 JVM 参数。

一个例子:

-javaagent:lib/spring-dependencies/spring-agent.jar 
Run Code Online (Sandbox Code Playgroud)

从编译时编织转向加载时编织时的其他更改

您还必须在 claspath 上的 META-INF 文件夹中提供 aop.xml 文件。对于我的跟踪示例,它看起来像这样:

<!DOCTYPE aspectj PUBLIC
        "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
    <weaver>
        <!-- only weave classes in this package -->
        <include within="aspects.trace.demo.*" />
    </weaver>
    <aspects>
        <!-- use only this aspect for weaving -->
        <aspect name="aspects.trace.TraceAspect" />
    </aspects>
</aspectj>
Run Code Online (Sandbox Code Playgroud)

在此配置中,您可以看到 TraceAspect 类将与演示包中的所有类编织在一起。

具有加载时编织的 Spring 配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context        
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <bean id="traceAspect" class="aspects.trace.TraceAspect" 
        factory-method="aspectOf"/>

    <context:load-time-weaver />
</beans>
Run Code Online (Sandbox Code Playgroud)

配置文件几乎与编译时配置文件相同,只是它还包含加载时编织器元素。

我希望这有帮助!