我一直在谷歌上寻找这个错误,我找到的大部分答案都是将 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/