android - 如何在Android项目中使用PowerMock?

标签 android mocking mockito powermock

我创建了一个新的 Android 测试项目。我从 https://code.google.com/p/powermock/downloads/list 下载了 powermock-mockito-junit-1-1.5.zip。 .我将所有库添加到测试项目的 libs 文件夹中。测试类是一个非常简单的对象:

package com.test.test;

import org.junit.runner.RunWith;
import org.powermock.modules.junit4.PowerMockRunner;

import android.util.Log;

@RunWith(PowerMockRunner.class)
public class TestTestAndroid {

    public void testRuns() {
        Log.e("test", "Test case is called");
    }
}

然后,我尝试从 Eclipse 运行项目,或从命令行创建项目。我得到同样的错误:

转换为 Dalvik 格式失败:无法执行 dex:多个 dex 文件定义了 Lorg/hamcrest/Description;

事实证明,junit-4.8.2.jarmockito-all-1.9.5.jar 都定义了 org.hamcrest.Description。出于显而易见的原因,我必须包含 Mockito jar - 我需要 Mockito。 Android 提供了不同版本的 JUnit,但它是旧版本,不包含 @RunWith 注释。

有人可以回答如何在 Android 项目中使用 powermock 和 mockito,而不会出现冲突的 org.hamcrest.Description 问题吗?

最佳答案

抱歉,您不能在 Dalvik VM 中使用 PowerMock。

PowerMock 的工作原理是在使用 Javassist 的自定义类加载器下运行测试。修改类的字节码。这在普通 JVM 上工作正常,但在 Dalvik 上字节码和类格式不同,所以这种方法不起作用。 PowerMock 需要重写才能使用 Dexmaker而不是 Javassist - 这绝对是非常重要的,我在 PowerMock 上看不到任何类似的东西 issues list .

关于android - 如何在Android项目中使用PowerMock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15305490/

相关文章:

android - GreenDao 按列名设置实体属性

android - 多个 FirebaseAuth 实例 : which one is used for queries?

php - 单元测试 Zend Controller 和模拟一些已执行的操作

java - 如何验证特定的类方法是否作为参数传递?

android - Kotlin 协程使用 mockito 进行单元测试

java - Android 应用程序类全局实例或静态

java - HashMap 和 ArrayList 的 Android OutOfMemoryError

Python、单元测试、mock内置/扩展类型类方法

delphi - 如何在 Spring for Delphi 中使用带有 Autowiring 功能的模拟?

java - 使用 mockito stub 具有依赖泛型参数的方法