我正在尝试使用
AndroidTestCase进行测试.我试图在我的应用程序中只测试一个特定的类,但是这个类不会扩展Activity,Service或其他任何东西.它基本上是一个普通的Java类,除了它需要一个Context.它是一个pojo,它的一些变量是在它们的创建中需要android api调用的对象,例如调用SensorManager.
我试着用:
Context context = getContext();
运行我的测试时,这给了我一个例外“在onCreate()之前不能用于活动的系统服务”.这种方法是否必须被覆盖?
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);
}
我收到一个错误,上下文为null.在什么情况下AndroidTestCase.getContext()会返回null?我的设置似乎没问题….
最佳答案 有几种方法,你可以使用mockcontext作为一个解决方案,或者如果你真的不关心上下文是什么有效,你可以使用InstrumentationTestCase并通过getInstrumentation()获取测试apk的上下文.getContext ().
我认为你的上下文为null的原因是此时实际上没有android上下文存在,你可以通过创建一个应用程序或一个活动来获得一个.