带有 Mockito 的 Android 中的 java.lang.RuntimeException : Stub!

标签 java android unit-testing mockito powermock

我一直在谷歌上寻找这个错误,我找到的大部分答案都是将 junit 依赖移到顶部。或者使用另一个模拟框架。我已经搬了依赖还是不行,整个项目用的是mockito和powermock。

这是简历里的代码。

package co.pack.session;

import com.google.gson.JsonObject;
import org.junit.Test;
import co.pack.Session.Organization;
import static org.junit.Assert.assertEquals;

public class TestOrganization {

@Test
public void testLoadJson() {
    JsonObject json = new JsonObject();
    json.addProperty("theme_color", "red");
    Organization organization = new Organization();

    organization.loadFromJson(json);

    assertEquals("red", Organization.getThemeColor());
    }
}

实现

public static void loadFromJson(JsonObject json) {
    Organization.name = json.has("name") ? json.get("name").getAsString() : "";
    Organization.image = json.has("image") ? json.get("image").getAsString() : "";

    printActualOrganization();
}

private static void printActualOrganization() {
    Log.i(TAG, "_name_ " + name);
    Log.i(TAG, "_image_ " + image);
}

它在日志行上失败

Log.i(TAG, "_name_ "+ name);

得到这个

java.lang.RuntimeException: Stub!

at android.util.Log.i(Log.java:9)
at co.mobico.Session.Organization.loadJson(Organization.java:50)
at co.mobico.session.TestOrganization.testLoadJson(TestOrganization.java:28)

日志行,在我的测试中从未导致任何错误,我不知道在这种情况下发生了什么。

最佳答案

您可以尝试将以下选项添加到您的应用build.gradle

android {

    testOptions {
        unitTests.returnDefaultValues = true
    }
}

这应该可以防止您获得此 RuntimeException,因为在这种情况下 Android-Methods 将返回默认值。请注意,这可能会引发其他问题,例如当使用 TextUtils.equals(...) 时。

基本上我同意模拟被测单元的每个依赖项的策略,但您可以使用返回值作为一种变通方法。

关于带有 Mockito 的 Android 中的 java.lang.RuntimeException : Stub!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41705788/

相关文章:

java - 如何在 Java 中进行 COM 互操作?

java - 如何抓取 "shift+anykey"的NativeEvent.getKeyCode

具有任意宽高比的android Gallery

unit-testing - 支持集成测试而不是单元测试是错误的吗?

java - 如何将文本文件资源读入 Java 单元测试?

android - 在单个 Android 项目中同时进行 JUnit 和 Cucumber 测试

java - "."参数的用途是什么?

java - 计算现有对象的数量

安卓安全模式密码保护

android - 具有居中元素的 Horizo​​ntalScrollView