【问题标题】:Mocking static method not working模拟静态方法不起作用
【发布时间】:2017-03-29 12:53:29
【问题描述】:

我编写的代码只是使用 powermock 模拟了一个静态方法。

在运行测试用例时,没有最后一次调用可用的模拟

调试时发现在expect语句中抛出。

异常 throwm 的堆栈跟踪:

java.lang.IllegalStateException: no last call on a mock available
at org.easymock.EasyMock.getControlForLastCall(EasyMock.java:466)
at org.easymock.EasyMock.expect(EasyMock.java:444)
at junit.util.mock.Test.test1(Test.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
....
....

编写的测试类:

import static org.junit.Assert.assertEquals;

import static org.powermock.api.easymock.PowerMock.mockStatic;
import static  org.powermock.api.support.membermodification.MemberMatcher.constructor;

import org.easymock.EasyMock;
import static org.powermock.api.support.membermodification.MemberModifier.suppress;
import static org.easymock.EasyMock.expect;
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 static org.powermock.api.easymock.PowerMock.replayAll;

import Testing;

@RunWith(PowerMockRunner.class)
@PrepareForTest({Testing.class})
public class Test {

 @org.junit.Test
 public void test1() {
mockStatic(Testing.class);
expect(Testing.getWord()).andReturn("my Cal").anyTimes();
PowerMock.replay(Testing.class);
PowerMock.verify(Testing.class);
assertEquals(Testing.getWord(),"my Cal");
}
}

待测类:

public class Testing {
public static String getWord() {
    return "from test";
    }
}

【问题讨论】:

    标签: unit-testing mocking mockito powermock easymock


    【解决方案1】:

    我试过你的代码,它工作得很好。所以我不知道该说什么。不正确的一件事是verify 应该在最后。但这不是导致问题的原因。

    我可以给你我使用的依赖项,以防它与此相关。

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.easymock</groupId>
      <artifactId>easymock</artifactId>
      <version>3.4</version>
    </dependency>
    <dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-core</artifactId>
      <version>1.6.6</version>
    </dependency>
    <dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-api-easymock</artifactId>
      <version>1.6.6</version>
    </dependency>
    <dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-module-junit4</artifactId>
      <version>1.6.6</version>
    </dependency>
    

    【讨论】:

    • 你用的是哪个版本的java?
    • Java 8. 1.8.0_102
    猜你喜欢
    • 2016-08-20
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多