java.lang.IllegalStateException: нет последнего вызова макета, доступного только от ant, отлично работает в eclipse

Я использую EasyMock3.1/testNg-5.7/Powermock-easymock-1.5-full. Код очень простой, просто смоделируйте общедоступный статический метод.

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("хорошо");"

Мой муравьиный скрипт:

 <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>

Я ценю любой отзыв, спасибо!


person user2201253    schedule 23.03.2013    source источник
comment
ты разобрался с этим?   -  person hrishikeshp19    schedule 22.11.2013


Ответы (1)


Для сравнения попробуйте запустить с аннотацией @RunWith(PowerMockRunner.class) при запуске в ant (через junit). Аннотация @RunWith выглядит как единственное различие между вашим тестовым примером статического метода и из документации powermock.

Это могло быть ошибкой testng. Я пытался воспроизвести ваш сбой в муравье, но у меня все работало нормально. Вот файлы 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
person Drew MacInnis    schedule 06.08.2013
comment
@RunWith(PowerMockRunner.class) можно использовать только с тестом junit. - person Archit Jain; 14.08.2013
comment
Хорошо, я обновлю свой ответ, чтобы упомянуть попытку запуска через JUnit в ant для сравнения. - person Drew MacInnis; 17.08.2013
comment
Обновлен мой ответ, чтобы упомянуть, что этот сценарий работал в ant (для меня) с перечисленными версиями jar. - person Drew MacInnis; 17.08.2013