gpt4 book ai didi

java - EasyMock/PowerMock - 模拟静态方法引发错误 : no last call on a mock available

转载 作者:行者123 更新时间:2023-12-02 09:44:59 27 4
gpt4 key购买 nike

我正在编写一个简单的 Java 类来测试 EasyMock/PowerMock 功能以模拟类中的静态方法。

所以我只是模拟 Math.random 方法来返回一个constant 值以用于测试目的。

这是我的代码:

package x.y.z;

import org.easymock.EasyMock;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;



@RunWith(PowerMockRunner.class)
@PrepareForTest(Math.class)
public class PowerMockStaticTestExample {

@BeforeClass
public static void setupBeforeClass() {
try {
PowerMock.mockStatic(Math.class);
EasyMock.expect(Math.random()).andReturn(0.50).anyTimes();
PowerMock.replay(Math.class);
}
catch(Exception e)
{
e.printStackTrace();
}

}

@Test
public void dummyTest()
{
System.out.println("DummyTest Called!");
assert true==true;
}

@Test
public void testMath()
{
System.out.println("Math Test Start "+Math.random());
assert true==true;

}


}

依赖关系:

我正在使用:easyMock:org.easymock:easymock:3.1

powerMockEasyMockFull:org.powermock:powermock-easymock-release-full:1.5.1

使用java 1.7.0_80

但是每次我尝试使用 testng 运行这个测试类时;它抛出以下异常:

java.lang.IllegalStateException: no last call on a mock available
at org.easymock.EasyMock.getControlForLastCall(EasyMock.java:520)
at org.easymock.EasyMock.expect(EasyMock.java:498)
at x.y.z.PowerMockStaticTestExample.setupBeforeClass(PowerMockStaticTestExample.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:564)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:213)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138)
at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:175)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:107)
at org.testng.TestRunner.privateRun(TestRunner.java:767)
at org.testng.TestRunner.run(TestRunner.java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)

在浏览了 SO 和 Google 上的大量帖子后;我终于想到在这里问这个问题了。

希望这里的专家能帮帮我。提前致谢!

最佳答案

您似乎使用 TestNG(查看导入)。但使用的运行程序是 JUnit 运行程序。

然后,PowerMock 无法与 BeforeClass 一起使用。您需要使用Before。这是一个工作示例。

import org.easymock.EasyMock;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest(Math.class)
public class PowerMockStaticTestExample {

@Before
public void setupBeforeClass() {
PowerMock.mockStatic(Math.class);
EasyMock.expect(Math.random()).andReturn(0.50).anyTimes();
PowerMock.replay(Math.class);
}

@Test
public void dummyTest() {
System.out.println("DummyTest Called!");
}

@Test
public void testMath() {
System.out.println("Math Test Start "+Math.random());
}
}

关于java - EasyMock/PowerMock - 模拟静态方法引发错误 : no last call on a mock available,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56734723/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com