3

我正在使用 EasyMock3.1/testNg-5.7/Powermock-easymock-1.5-full。代码很简单,只是mock了一个公共的静态方法。

import static org.powermock.api.easymock.PowerMock.createMock;

import static org.powermock.api.easymock.PowerMock.mockStatic;

import static org.powermock.api.easymock.PowerMock.replay;

import static org.powermock.api.easymock.PowerMock.verify;

import static org.easymock.EasyMock.expect;


@PrepareForTest( {MyStatic.class})

public class StaticTest extends PowerMockTestCase{

  @Test

  public void testStaticMethod()

  {

   mockStatic( MyStatic.class );

    expect( MyStatic.getString() ).andReturn( "good" );

    replay( MyStatic.class );

    MyStatic.getString();

    verify(MyStatic.class);

  }

}

我正在使用 testng-eclipse 插件,它在 eclipse 中运行良好。但是当我尝试通过 ant 运行它时,我得到:

java.lang.IllegalStateException: no last call on a mock available
    at org.easymock.EasyMock.getControlForLastCall(EasyMock.java:520)
    at org.easymock.EasyMock.expect(EasyMock.java:498)

它在代码“expect(MyStatic.getString()).andReturn(“good”);”处抱怨

我的蚂蚁脚本是:

 <testng classpathref="test.runtime.classpath" outputDir="${report.absolute.path}/testngreport" workingDir="${test.module.basedir}">


          <!--<jvmarg line="-Xdebug -Xrunjdwp:transport=dt_socket,address=1044,server=y,suspend=y"/>-->


          <classfileset dir="${test.module.testoutput.dir}" includes="**/*.class"/>

        </testng>

我感谢任何反馈,谢谢!

4

1 回答 1

0

作为比较,在 ant 中运行时(通过 junit)尝试使用 @RunWith(PowerMockRunner.class) 注释运行。@RunWith 注释看起来像是您的静态方法测试示例与powermock 文档中的示例之间的唯一区别。

这可能是一个测试错误。我尝试在蚂蚁中重现您的失败,但一切对我来说都很好。以下是我使用的 jar 文件:

$ ls -1 lib/
cglib-nodep-2.2.3.jar
easymock-3.1.jar
javassist.jar
objenesis-1.4.jar
powermock-easymock-1.5.1-full.jar
testng-6.8.jar
于 2013-08-06T18:28:53.467 回答