gpt4 book ai didi

java - 当被测类不是 Activity 时获取用于 AndroidTestCase 的上下文

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:42 24 4
gpt4 key购买 nike

我正在尝试使用 AndroidTestCase 进行测试。我试图在我的应用程序中只测试一个特定的类,但是这个类不扩展 Activity、Service 或其他任何东西。除了需要上下文之外,它基本上是一个普通的 Java 类。它是一个 pojo,它的一些变量是在创建时需要调用 android api 的对象,例如对 SensorManager 的调用。我尝试使用:

Context context = getContext();

当运行我的测试时,这给了我异常“系统服务在 onCreate() 之前对 Activity 不可用”。是否必须重写该方法?
final Context context = new IsolatedContext(null, getContext())
给出同样的东西。

我使用 Android 测试框架而非 Robolectric 之类的原因是因为我正在测试的类收集有关设备的硬件信息,因此我想在实际设备上运行测试。我查看了 AndroidTestCase 的开发者文档,但看不到我在示例中寻找的内容。我不确定其他测试用例类是否会实现我想要的。有任何想法吗?

我的测试类:

public class DeviceTest extends AndroidTestCase {
ClassToTest mClassToTest;

@Override
protected void setUp() throws Exception {
final Context context = new IsolatedContext(null, getContext()) {
@Override
public Object getSystemService(final String pName) {
return getContext().getSystemService(pName);
}
};

mClassToTest = new ClassToTest(context);
super.setUp();
}

public void testClassMethod() {
Object mObject;
mObject = mClassToTest.getObject();
assertNotNull(mObject);
}

@Override
protected void tearDown() throws Exception {
mClassToTest = null;
super.tearDown();
}
}

提前致谢。

更新:将我的设置更改为以下内容后:

 @Override
protected void setUp() throws Exception {
super.setUp();
context = this.getContext();
mClassToTest = new ClassToTest(context);
}

我收到上下文为空的错误。什么情况下AndroidTestCase.getContext()会返回null?我的设置似乎没问题....

最佳答案

您可以从 AndroidTestCase 直接访问 mContext,或调用 getContext()。

从这些返回的上下文中,如果需要,您也可以调用 Context.getApplicationContext()。

关于java - 当被测类不是 Activity 时获取用于 AndroidTestCase 的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19793381/

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