gpt4 book ai didi

java - Powermock(使用 Easymock)没有最后一次调用可用的模拟

转载 作者:搜寻专家 更新时间:2023-10-30 21:46:00 25 4
gpt4 key购买 nike

我正在尝试运行一个简单的测试用例。我有以下方法。

public static void run(String[] args) throws Throwable {
CommandLineArguments opts = CommandLineOptionProcessor.getOpts(args);
}

我将继续构建此方法/测试用例。但是我只是想确保一个简单的测试用例首先起作用。所以我写了下面的测试。

@Test
public void testRun() {
String[] args = {"--arg1", "value", "--arg2", "value2"};

mockStatic(CommandLineOptionProcessor.class);
expect(CommandLineOptionProcessor.getOpts(args));

EasyMock.replay(CommandLineOptionProcessor.class);
}

之后我得到以下错误:

java.lang.IllegalStateException: no last call on a mock available

我阅读了 StackOverflow 上的其他一些帖子,但他们的解决方案似乎是将 PowerMock 与 Mockito 结合使用。我正在使用 Powermock 和 Easymock,所以这应该不是问题。

我听从了 Rene 的建议,并将以下内容添加到类(class)的顶部。

@PrepareForTest(CommandLineOptionProcessor.class)
@RunWith(PowerMockRunner.class)
public class DataAssemblerTest {

我修正了之前的错误。但是现在我有这个错误。

java.lang.IllegalArgumentException: Not a mock: java.lang.Class
at org.easymock.internal.ClassExtensionHelper.getControl(ClassExtensionHelper.java:61)
at org.easymock.EasyMock.getControl(EasyMock.java:2172)
at org.easymock.EasyMock.replay(EasyMock.java:2074)
.
.
.

任何关于可能导致这种情况的想法都会很棒。

最佳答案

您是否使用 @RunWith(PowerMockRunner.class)@PrepareForTest(CommandLineOptionProcessor.class) 注释了测试类?

 @RunWith(PowerMockRunner.class)
@PrepareForTest(CommandLineOptionProcessor.class)
public class TestClass {

@Test
public void testRun(){

您需要测试类级别的 @PrepareForTest(CommandLineOptionProcessor.class)。查看Powermock doc :

Use the @PrepareForTest(ClassThatContainsStaticMethod.class) annotation at the class-level of the test case.

还要确保所需的库位于测试类路径中。

在你的例子中是 javassist图书馆不见了。把它放在类路径上。也许其他一些库也丢失了……我们会看到的。

如果你得到

java.lang.IllegalArgumentException: Not a mock: java.lang.Class

那么你正在使用EasyMock.replay(),但你必须使用PowerMock.replay()

关于java - Powermock(使用 Easymock)没有最后一次调用可用的模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20123613/

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