Java 只有在通过ant调用testng时,才能对模拟进行最后一次调用

Java 只有在通过ant调用testng时,才能对模拟进行最后一次调用,java,ant,testng,powermock,easymock,Java,Ant,Testng,Powermock,Easymock,我的测试堆栈是: TestNG-粗体显示,因为我认为@runWith是推荐的解决方案,而这只是JUnit 轻松的 PowerMock的MockStatic 我有一个用@PrepareForTest(StaticClass.class)注释的测试类 然后在我的测试中,我做了一个非常简单的 PowerMock.mockStatic(StaticClass.class); StaticClass.method(参数); expectLastCall().anyTimes() 我得到了标准的“jav

我的测试堆栈是:

  • TestNG-粗体显示,因为我认为@runWith是推荐的解决方案,而这只是JUnit
  • 轻松的
  • PowerMock的MockStatic
我有一个用@PrepareForTest(StaticClass.class)注释的测试类

然后在我的测试中,我做了一个非常简单的

PowerMock.mockStatic(StaticClass.class);
StaticClass.method(参数);
expectLastCall().anyTimes()

我得到了标准的“java.lang.IllegalStateException:NoLastCallonAnmockAvailable”问题,但只有在从ant运行TestNG时,而不是从Eclipse运行时。我相信我的类路径包含了所有必要的.jar文件,因为调用PowerMock.mockStatic()很好,所有jar都添加到了同一个类路径中


非常感谢您的帮助。

由于powermock和testng的某些不兼容版本导致错误,并且没有覆盖前面提到的对象工厂。

请发布完整的、可运行的示例。提示:欢迎提供一些反馈。现在我不知道你是否觉得我的答案不够充分,如果你正在寻找更多/其他信息……你的答案确实不够充分,因为你所说的是,当我看到眼前的错误时,这应该是不可能的。我处理企业应用程序,因此无法提供代码。就这个问题而言,我已经能够追踪到一些不兼容的版本,并且没有覆盖对象工厂。是的,虽然最好的解决方案是没有静态调用,但这并不总是可能的,我发现你关于“学习如何创建可测试代码”的陈述相当高人一等。我将用有关不兼容版本的信息来回答这个问题。