java.lang.IllegalStateException : no last call on a mock available with PowerMock and EasyMock

标签 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 中的说明中的所有部分

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

最佳答案

你在这里混合了很多东西。首先,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);
    }
}

关于java.lang.IllegalStateException : no last call on a mock available with PowerMock and EasyMock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32854479/

相关文章:

Java 通用 : Operator "*" cannot be applied to T, T 。我很难理解通用的

java - 复制构造函数类实例化

java - JUnit @Ignore 所有其他测试(@IgnoreOther?)

java - 由于时区不同导致时间戳时间不匹配

java - org.mockito.exceptions.misusing.InvalidUseOfMatchersException :Misplaced argument matcher

java - 遗传算法 : nothing getting added?

java - 通过查找特定行将其写在文本文档中的特定位置

android - 在 Android 中测试 AutoCompleteTextView

java - Mockito 未返回预期对象时

java - Mockito 重复方法调用正在测试的同一函数/构造函数