gpt4 book ai didi

android - 使用 JUnit 和 JDK 测试 Android 代码

转载 作者:搜寻专家 更新时间:2023-10-30 21:29:30 25 4
gpt4 key购买 nike

我正在为我的 Android 代码编写一些 POJO 测试。

我想使用 JDK 在本地运行它们(而不是使用模拟器上的 Dalvik)——为了速度、JUnit 4、Mockito,并且能够在没有设备的情况下 headless 运行——所以我在 Eclipse 中有一个单独的“Java”项目.

如果我正在测试的方法恰好引用了 Android SDK 中的任何内容,例如android.util.Log,测试失败 - 这是有道理的,因为 android.jar 不在类路径中。要重现我有这个测试用例:

public class FooTests {
@Test
public void testFoo() {
android.util.Log.d("x", "y");
}
}

如果我将 android.jar 显式添加到测试项目的类路径中,我会得到如下异常

java.lang.RuntimeException: Stub!
at android.util.Log.d(Log.java:7)
at com.example.FooTests.testFoo(FooTests.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

有没有一种方法可以让代码正常工作而无需模拟 Android SDK 依赖的每一点?也许模拟出的 android.jar 已经存在?

编辑:现在我结束了像android.util.Log这样的包装类并将它们注入(inject)到实例中,用于经典的基于 IOC 的测试。 Scott 的 PowerMock 建议是我需要时的下一步。

后期编辑:Robolectric !

最佳答案

我遇到了同样的问题。我想在本地测试简单的 POJO。
具体来说,我的代码想使用 android.util.Base64。
我最终做的是使用 SDK 安装 Android 4 源,并将 android.util.Base64 类复制到我的项目中。
令人惊讶的是,这有效。

关于android - 使用 JUnit 和 JDK 测试 Android 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7389553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com