java.lang.IllegalStateException:没有最后一次调用PowerMock和EasyMock提供的模拟

时间:2015-09-29 22:00:26

标签: java junit mockito powermock easymock

我有一个使用PowerMock测试来自Math的静态方法的测试用例

@RunWith(PowerMockRunner.class)
@PrepareForTest( { Math.class })
public class Test{
    @Test
        public void test2(){
            PowerMockito.mockStatic(Math.class);
            EasyMock.expect(Math.abs(-123)).andReturn(1);
            EasyMock.replay(Math.class);
            long returns = Math.abs(-123);
            EasyMock.verify(Math.class);
            org.junit.Assert.assertEquals(1,returns);
        }
}

我的pom.xml看起来像

<dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>${mockito.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymock</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-api-mockito</artifactId>
            <version>1.6.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-module-junit4</artifactId>
            <version>1.6.2</version>
            <scope>test</scope>
        </dependency>

我得到了错误

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

这是我第一次使用PowerMock,我只想尝试测试静态方法,并选择Java Math类进行测试。我想我已经完成了https://code.google.com/p/powermock/wiki/MockStatic

指令中的所有部分

我的测试用例有什么问题?

1 个答案:

答案 0 :(得分:1)

你在这里混合很多东西。首先,EasyMock和Mockito是两回事。 PowerMock(与EasyMock一起使用)和PowerMockito(与Mockito一起使用)也是如此。我会坚持使用EasyMock。

从那里开始,使用PowerMock时,PowerMock会完成创建,替换和验证。原因是你要将一个类传递给它,而不是和Object。所以EasyMock不会那样。

以下是工作代码:

@RunWith(PowerMockRunner.class)
@PrepareForTest( { Math.class })
public class MathTest {

    @Test
    public void test2(){
        PowerMock.mockStatic(Math.class);
        EasyMock.expect(Math.abs(-123)).andReturn(1);
        PowerMock.replay(Math.class);
        long returns = Math.abs(-123);
        PowerMock.verify(Math.class);
        assertEquals(1, returns);
    }
}