Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 在junit测试期间忽略Aspectj_Spring_Aspectj - Fatal编程技术网

Spring 在junit测试期间忽略Aspectj

Spring 在junit测试期间忽略Aspectj,spring,aspectj,Spring,Aspectj,情况如下: 我们有一个定义了方法方面的类 我们对这种方法进行了JUnit测试a 当我运行JUnit测试时,它也会激活方面。有没有想过如何在单元测试中忽略方面 我对我的方面进行了单独的测试,效果很好。因此,在我的单元测试中,我只想测试methodA,不需要任何附加方面 我使用Spring3.0及其aspectj支持 提前谢谢 问候,, Max您可以禁用我假设您的IDE正在执行的编译时编织,并在单独的AspectJ测试中使用加载时编织 要启用加载时编织,必须提供javaagent作为JVM参数 例如

情况如下:

  • 我们有一个定义了方法方面的类
  • 我们对这种方法进行了JUnit测试a 当我运行JUnit测试时,它也会激活方面。有没有想过如何在单元测试中忽略方面

    我对我的方面进行了单独的测试,效果很好。因此,在我的单元测试中,我只想测试methodA,不需要任何附加方面

    我使用Spring3.0及其aspectj支持

    提前谢谢

    问候,,
    Max

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

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

    例如:

    -javaagent:lib/spring-dependencies/spring-agent.jar 
    
    从编译时移动到加载时编织时的其他更改

    您还必须在CLAPATH上的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类将与演示包中的所有类一起编织

    带负载时间交织的弹簧配置

    <?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>
    
    
    
    配置文件与编译时配置文件几乎相同,只是它还包含加载时weaver元素


    我希望这有帮助

    在您的测试场景中,是否可以为这些特定测试使用单独的applicationContext,以便您可以从该上下文中注释AspectJ支持?感谢Vladimir,我的aspect it测试有aspect it配置,但我不想为JUnit测试创建另一个版本,只是为了关闭编织。我会试试Espen的解决方案,看看效果如何。谢谢Espen,今天我会试一试,只是想一想,不确定它是否有效。用于编织的classA和AspectForClassA是相同的。当我运行Aspect时,我确实需要编织以及应用程序运行。当我运行JUnit时,我不会。那么,我如何在配置中指定必须忽略编织,但仅限于JUnit测试呢?您应该重构代码,并将方面逻辑放在单独的类中。根据我上面的建议,默认情况下,您将无法进行编织。每次需要时,都必须将javaagent作为JVM参数提供。如果您有EclipseAJDT插件提供的自动编译时编织功能,那么您必须首先在项目中禁用AspectJ特性?