我一直在Google上查找此错误,我发现的大多数答案都是将junit依赖关系移至顶部。或使用另一个模拟框架。我已经消除了依赖关系,但仍然失败了,整个项目使用了模仿和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方法将返回默认值。请注意,这可能会引起其他问题,例如使用时TextUtils.equals(...)
。
基本上,我同意模拟被测单元的每个依赖关系的策略,但是您可以将返回值用作一种解决方法。