莫基托';s spy不能使用maven与AspectJ一起工作

莫基托';s spy不能使用maven与AspectJ一起工作,maven,unit-testing,mockito,aspectj,aspectj-maven-plugin,Maven,Unit Testing,Mockito,Aspectj,Aspectj Maven Plugin,我有下面的测试类,我正在使用Mockito的spy。通过使用Eclipse运行我的单元测试(右键单击->以单元测试的形式运行),所有测试都通过了,这意味着使用m2e和AJDT的Eclipse构建过程工作正常 @RunWith(MockitoJUnitRunner.class) 公共类抽样测试{ @嘲弄 二等兵:另一名士兵模仿了一名士兵; @间谍 @注射模拟 private-SampleImpl-sampleService=new-SampleImpl(){ @凌驾 公共方法(){ ... } }

我有下面的测试类,我正在使用Mockito的spy。通过使用Eclipse运行我的单元测试(右键单击->以单元测试的形式运行),所有测试都通过了,这意味着使用m2e和AJDT的Eclipse构建过程工作正常

@RunWith(MockitoJUnitRunner.class)
公共类抽样测试{
@嘲弄
二等兵:另一名士兵模仿了一名士兵;
@间谍
@注射模拟
private-SampleImpl-sampleService=new-SampleImpl(){
@凌驾
公共方法(){
...
}
};
@试验
public void someTest()引发异常{
sampleService.methodUnderTest();
}
然而,当我使用maven运行测试时,我得到了以下异常

测试运行:1,失败:0,错误:1,跳过:0,运行时间:0.183秒
Eclipse和AJDT中使用的AJC编译器与我的AspectJ maven插件配置之间有什么区别

好的,您在Maven中使用了一个非常旧的AspectJ编译器和2011年的运行时,但是您的AJDT可能使用了更新的版本。顺便说一句,您的代码真的必须符合Java 6吗?无论如何,这应该不是问题,但我建议使用当前的AspectJ Maven插件1.7和最新的AspectJ版本。您仍然可以编译1.6兼容的代码。当我试图用旧的AspectJ版本重新创建您的情况时,代码甚至无法编译,但您没有提供真正的版本,因此我不知道您的JDK版本、Mockito版本、JUnit版本等

在POM中尝试此Maven配置:


UTF-8
1.6
1.8.6
maven编译器插件
3.3
${java.version}
${java.version}
错误的
org.codehaus.mojo
aspectj maven插件
1.7
符合事实的
${java.version}
${java.version}
忽视
${java.version}
UTF-8
符合事实的
过程源
编写
测试编译
org.aspectj
aspectjtools
${aspectj.version}
org.aspectj
aspectjrt
${aspectj.version}
运行时
朱尼特
朱尼特
4.11
测验
org.mockito
莫基托磁芯
1.9.5
测验

这对我很有用。顺便说一句,请注意除了

之外的
SampleImpl
最后一个类吗?当您分配它的自定义实现时(通过声明
new SampleImpl(){…}
,但您随后要求Mockito也监视这个。然后Mockito尝试监视实际的
SampleImpl
类,并抛出一个错误,因为该类是final。不,它不是。它实际上是一个无状态EJB,不能是final,因为容器也使用EJB的代理模式,就像Mockito用于spies一样,并且该类不能是final最后。你好,亚历山大。谢谢你的评论。升级到AspectJ插件1.7解决了这个问题。除了maven插件之外,我实际上使用的是AspectJ 1.8.6以及Mockito(1.10.19)和JUnit(4.11)的所有最新版本。现在我真的很想知道旧插件可能会导致什么样的问题。