spring - 在junit测试期间忽略Aspectj

标签 spring aspectj

这是情况:

  • 我们有定义方面的类,它的方法A;
  • 我们对这个methodA进行了JUnit测试;

  • 当我运行 JUnit 测试时,它也会激活 Aspect。任何想法如何在单元测试期间忽略方面?

    我为我的 Aspects 进行了单独的测试,它工作正常。所以在我的单元测试中,我只想测试没有任何附加方面的 methodA。

    我使用 spring 3.0 和它的 aspectj 支持。

    提前致谢。

    问候,
    最大限度

    最佳答案

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

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

    一个例子:

    -javaagent:lib/spring-dependencies/spring-agent.jar 
    

    当您从编译时切换到加载时编织时的其他更改

    您还必须在 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>
    

    在此配置中,您可以看到 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>
    

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

    我希望这有帮助!

    关于spring - 在junit测试期间忽略Aspectj,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7565490/

    相关文章:

    spring - 带有 Spring Data 的 Elasticsearch - _local 搜索首选项

    java - JConsole (JMX) 中仍添加未注释的方法

    maven - 未应用定义的建议 : Aspectj Pointcut

    java - 如何配置aspectj忽略getter和setter

    java - 是否可以拦截对类方法的任何调用?

    java 休息调用获取 url net::ERR_FAILED

    java - 将 iajc 与 java 1.8 JDK 一起使用 - 比较器无法解析为类型

    java - 使用方面注释将类型间声明从 .aj 转换为 .java

    java - Spring @Transactional 作为动态 Jdk 代理和 aspectj 切面应用

    java - spring-boot 记录新线程的运行时异常