当前位置: 首页 > 知识库问答 >
问题:

JAVAlang.IllegalArgumentException:不是模拟:java。PowerMock和EasyMock上的lang.类

严心水
2023-03-14

我有一个使用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.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)

这是我第一次使用PowerMock,我只想测试静态方法,我选择Java数学类进行测试。我想我已经完成了说明书中的所有部分https://code.google.com/p/powermock/wiki/MockStatic

我的测试用例出了什么问题?

共有2个答案

潘凯
2023-03-14

我没有使用EasyMock,而是使用mockito替换它,代码如下

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

这段代码在Java 7中运行良好,但在Java 8中,它失败了

苏宏峻
2023-03-14

我面临这个问题,并通过使用PowerMock解决它。重播(StaticClass.class)

在您的情况下,您所要做的就是将EasyMock.replay(Math.class);替换为PowerMock.replay(Math.class);因为您已经使用了“PowerMock”。

 类似资料:
  • 它的实现DAO类类似于下面的一个。 我搜索了PowerMock/EasyMock文档,但我猜大多数API方法都提供了对象,这些对象为我提供了DAO接口的虚拟实现类。 > 是否有某种方法可以创建连接的模拟对象(假设我没有物理数据库访问权限),并可以运行类中提供的后续代码,因为我必须使用这种模拟来实现代码覆盖率?

  • 我正在尝试使用EasyMock+PowerMock模拟静态方法。如果我没有模拟静态方法,那么我会得到异常java.lang.ExceptioninInitializerError,但它有一个不同的堆栈跟踪,这完全是由于我的代码文件造成的,错误是显而易见的。但是,如果我使用EasyMock+PowerMock模拟静态方法,则行PowerMock.MockStaticNice(ClassName.Cl

  • 问题内容: 是否可以使用EaskMock模拟具体的类?如果是这样,我该怎么办? 问题答案: 请参阅EasyMock类扩展文档,并从SourceForge项目下载它。但是,您不能模拟最终方法。 编辑:如注释中所述,这是EasyMock v3及更高版本的一部分。

  • 我正在尝试为以下类编写单元测试: 还有一些其他方法,但这个设置代码是与我的问题相关的。在单元测试中,我想模拟(使用EasyMock)对象以及它将返回的和对象: 当我尝试用JUnit运行它时,我得到以下错误: 在上没有我可以看到的公共变量。我是EasyMock的新手,所以我想我的问题是:对于我应该告诉我的mock返回什么,以及如何告诉它这样做?我根本不知道为什么设置代码会被调用,所以这是另一个谜。更

  • 问题内容: 我有以下要模拟的Logger,但要验证是否正在调用日志条目,而不是内容。 我想模拟用于LoggerFactory.getLogger()的任何类,但是我找不到如何做到这一点。到目前为止,这是我最终得到的结果: 我想知道: 我可以模拟静态模型以用于任何课程吗? 我只能似乎运行的,因此我似乎无法改变每个方法的特点。有没有解决的办法? 编辑结果: 我以为我已经尝试过了,但没有成功: 但是,谢

  • 因此,这是我第一次使用EasyMock,我正在尝试向一些遗留代码添加一些单元测试。 遗留代码在Spring 3.1中,我使用的是EasyMock 3.4。 我在这里试图完成的是测试一个调用dao的服务(在Spring中编写的方法)。 代码如下: 这是我用EasyMock编写的单元测试 所以基本上发生的是,我的单元测试失败了,因为 为空! 是的,如果它实际被执行,它将为空,因为在数据库中没有clie