3

EasyMock3.1/testNg-5.7/Powermock-easymock-1.5-full を使用しています。コードは非常に単純で、 public static メソッドをモックするだけです。

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" );" で文句を言います。

私のantスクリプトは次のとおりです。

 <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 documentationの唯一の違いのように見えます。

これは、テストのバグであった可能性があります。あなたの失敗をアリで再現しようとしましたが、すべてうまくいきました。使用した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 に答える