java.lang.IllegalStateException:没有最后一次调用 PowerMock 和 EasyMock 可用的模拟
java.lang.IllegalStateException: no last call on a mock available with PowerMock and EasyMock
我有一个使用 PowerMock 测试数学静态方法的测试用例,因为
@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数学class来测试。我想我已经完成了 https://code.google.com/p/powermock/wiki/MockStatic
中说明中的所有部分
我的测试用例有什么问题?
你在这里混了很多东西。首先,EasyMock 和 Mockito 是两个不同的东西。 PowerMock(与 EasyMock 一起使用)和 PowerMockito(与 Mockito 一起使用)也是如此。我会在这里坚持使用 EasyMock。
从那里开始,当使用 PowerMock 时,创建、替换和验证都是由 PowerMock 完成的。原因是您要向它传递一个 class,而不是对象。所以 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);
}
}
我有一个使用 PowerMock 测试数学静态方法的测试用例,因为
@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数学class来测试。我想我已经完成了 https://code.google.com/p/powermock/wiki/MockStatic
中说明中的所有部分我的测试用例有什么问题?
你在这里混了很多东西。首先,EasyMock 和 Mockito 是两个不同的东西。 PowerMock(与 EasyMock 一起使用)和 PowerMockito(与 Mockito 一起使用)也是如此。我会在这里坚持使用 EasyMock。
从那里开始,当使用 PowerMock 时,创建、替换和验证都是由 PowerMock 完成的。原因是您要向它传递一个 class,而不是对象。所以 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);
}
}