Search code examples
javajunitmockitopowermockeasymock

java.lang.IllegalArgumentException: Not a mock: java.lang.Class on PowerMock and EasyMock


I have a test case using PowerMock to test on static method from Math, as

@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);
        }
}

My pom.xml looks as

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

And I got error as

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)

This is the first time I'm using PowerMock, I just want to try to test static method, and I Choose Java Math class to test. I think I have done all the parts in the instructions from https://code.google.com/p/powermock/wiki/MockStatic

What's wrong with my test case?


Solution

  • Instead of using EasyMock, I use mockito to replace it, code as

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

    This code is working fine for me in Java 7, but in java 8, it fails