【问题标题】:java.lang.IllegalArgumentException: Not a mock: java.lang.Class on PowerMock and EasyMockjava.lang.IllegalArgumentException:不是模拟:PowerMock 和 EasyMock 上的 java.lang.Class
【发布时间】:2015-09-29 21:54:33
【问题描述】:

我有一个使用 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.IllegalArgumentException: Not a mock: java.lang.Class
    at org.easymock.internal.MocksControl.getControl(MocksControl.java:175)
    at org.easymock.EasyMock.getControl(EasyMock.java:2130)
    at org.easymock.EasyMock.replay(EasyMock.java:2032)

这是我第一次使用PowerMock,我只是想尝试测试静态方法,我选择Java Math类进行测试。我想我已经完成了来自https://code.google.com/p/powermock/wiki/MockStatic的说明中的所有部分

我的测试用例出了什么问题?

【问题讨论】:

  • 可能是因为EasyMock在代码中应该是PowerMockito

标签: java junit mockito powermock easymock


【解决方案1】:

我遇到了这个问题,我使用PowerMock.replay(StaticClass.class)解决了它

在您的情况下,您只需将EasyMock.replay(Math.class); 替换为PowerMock.replay(Math.class);,因为您已经使用了“PowerMock”。

【讨论】:

  • 当我使用org.powermock.api.easymock.PowerMock.replay; org.powermock.api.easymock.PowerMock.verify; 而不是org.easymock.EasyMock.replay; org.easymock.EasyMock.verify; 时,我已经解决了这个问题
【解决方案2】:

我没有用EasyMock,而是用mockito代替,代码为

    PowerMockito.mockStatic(Math.class);
    Mockito.when(Math.abs(-123)).thenReturn(1);
    int returns = Math.abs(-123);

这段代码在 Java 7 中运行良好,但在 Java 8 中却失败了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多