java – 当测试中的类不是活动时,获取在AndroidTestCase中使用的上下文

我正在尝试使用
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上下文存在,你可以通过创建一个应用程序或一个活动来获得一个.

点赞