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