2011-09-27 99 views
6

这里的情况:JUnit的过程中忽略的AspectJ测试

  1. 我们有定义方面它类的了methodA;
  2. 我们对此方法A有JUnit测试;

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

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

我使用spring 3.0及其aspectj支持。

在此先感谢。

问候, 最大

+2

是否可以在您的测试场景中为这些特定测试使用单独的applicationContext,以便您可以从此上下文注释掉AspectJ支持? –

+0

谢谢弗拉基米尔,我对Aspect IT测试有aspect-it-config,但我不想为JUnit测试创建另一个版本,以便关闭。我会尝试Espen的解决方案,看看它是如何发展的。 – maxx

回答

4

您可以禁用编译时编织,我认为你的IDE正在做和使用负载时在分离的AspectJ测试织。

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

一个例子:当你从编译时移动

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

其他变化加载时的织入

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

<!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> 

配置文件

Spring配置是大致相同的编译时的配置文件,但它也包含一个加载时织入元件。

我希望这有助于!

+0

谢谢埃斯本,今天会给它一个去吧 – maxx

+0

只是想过它,不知道它是否有效。用于编织的classA和AspectForClassA是相同的。当我运行Aspect IT时,我确实需要编织以及应用程序运行。当我运行JUnit时,我没有。那么如何在配置中指定必须忽略编织,但仅限于JUnit测试 – maxx

+0

您应该重构代码并将方面逻辑放在单独的类中。根据我上面的建议,你将不会默认编织。您必须在每次需要时提供javaagent作为JVM参数。如果像Eclipse AJDT插件为您提供自动编译时织入,则必须先禁用项目上的AspectJ特性。 – Espen