Java JUnitEclipse与Ant

Java JUnitEclipse与Ant,java,eclipse,ant,junit,mockito,Java,Eclipse,Ant,Junit,Mockito,我正试图通过Ant任务启动Junit测试,如下所示: <target name="TestDaoImpl"> <mkdir dir="${junit.output.dir}"/> <junit fork="yes" printsummary="withOutAndErr"> <jvmarg line="${conf.dir}"/> <formatter type=

我正试图通过Ant任务启动Junit测试,如下所示:

<target name="TestDaoImpl">
        <mkdir dir="${junit.output.dir}"/>
        <junit fork="yes" printsummary="withOutAndErr">
            <jvmarg line="${conf.dir}"/>
            <formatter type="xml"/>
            <test name="my.package.TestKSLDaoImpl" todir="${junit.output.dir}"/>
            <classpath refid="My.classpath"/>
        </junit>
 </target>
莫基托:

Mockito.when(convert.getXmlKsl(folder)).thenReturn(xmlStr); 
实际上,当我在Eclipse中运行测试时,我没有得到任何错误。 但当我通过Ant任务启动它时,我得到了以下错误:

org.mockito.exceptions.misusing.MissingMethodInvocationException: 
when() requires an argument which has to be 'a method call on a mock'.
For example:
    when(mock.getArticles()).thenReturn(articles);

Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods.
   Those methods *cannot* be stubbed/verified.
2. inside when() you don't call method on mock but on some other object.
3. the parent of the mocked class is not public.
   It is a limitation of the mock engine.

at org.powermock.api.mockito.PowerMockito.when(PowerMockito.java:495)
错误在这里:

PowerMockito.mockStatic(MyService.class);

===> Mockito.when(MyService.getInstance(myId)).thenReturn(myService);
我正在使用这个罐子:

JUnit 4
cglib-nodep-2.2.2.jar
javassist-3.18.1-GA.jar
mockito-all-1.9.5.jar
objenesis-2.1.jar
powermock-mockito-1.5.4-full.jar
与ant和PowerMockito有冲突吗?
为什么测试可以通过eclipse运行,但不能通过Ant运行?

为什么测试可以通过eclipse,但在命令行上运行时失败:

这些类型问题的原因,一个在命令行或IDE上传递但不是在两者上传递的构建,通常与类路径中的差异有关。通常,命令行工具和IDE将以不同的方式解决依赖关系。此外,大多数IDE还附带了自己的JUnit版本,可能与项目指定的版本不匹配

要解决这个问题,您需要分析命令行工具使用的类(在本例中是Ant)与IDE之间的差异。请记住,当一个类包含在多个依赖项中时,依赖项在命令行上的显示顺序非常重要

“all”表示所有依赖类都预打包到jar中,如果包含较新版本的依赖项,那么预打包的内容可能会出现问题。例如,如果您对Mockito All 1.9.5和Hamcrest 1.3有依赖关系,Mockito All 1.9.5预先打包了Hamcrest 1.1和Hamcrest 1.3,那么在类路径上会有同一jar的两个不同副本。这并不总是一个问题,除非您试图使用一个版本中的方法,而不是另一个版本中的方法。通常使用哪个版本最先列出

JUnit4、Mockito all 1.9.5和Hamcrest的某些版本存在一些已知的依赖性问题。我建议指定:JUnit4.11、Mockito core 1.9.5和Hamcrest 1.3。您需要检查以确保Eclipse正在使用这些版本,而不是替换自己的版本

Ant和PowerMockito之间的冲突:


Ant是一个构建工具,不应该与PowerMock有任何冲突。可能值得您花时间和精力升级到具有更好依赖关系管理的更现代的构建工具。Maven和Gradle都得到了很好的支持

这些类型问题的典型原因(构建工作在命令行或IDE上,而不是其他)与类路径中的差异有关。通常,comand line工具和IDE会以不同的方式解决依赖关系。您使用的JUnit版本是什么?请注意:mockito在西班牙语中的意思是“小鼻涕”。这就是全部
JUnit 4
cglib-nodep-2.2.2.jar
javassist-3.18.1-GA.jar
mockito-all-1.9.5.jar
objenesis-2.1.jar
powermock-mockito-1.5.4-full.jar