在Android junittesting用例中获取testing项目的上下文

有谁知道你怎么能得到testing项目在Android的junittesting案例(扩展AndroidTestCase)的上下文。

注意:testing不是仪器testing。

注2:我需要testing项目的上下文,而不是testing的实际应用程序的上下文。

我需要这个从testing项目的资源中加载一些文件。

Androidtesting支持库(目前com.android.support.test:runner:0.3)发布了新的方法。

@RunWith(AndroidJUnit4.class) @MediumTest public class SomeClassTest { private Context instrumentationCtx; @Before public void setup() { instrumentationCtx = InstrumentationRegistry.getContext(); } @Test public void someTest() { ... 

如果你还想要应用上下文运行:

 InstrumentationRegistry.getTargetContext(); 

看这里: getTargetContext()和getContext(在InstrumentationRegistry上)有什么区别?

经过一番研究,唯一的工作scheme似乎是约克已经指出的。 您必须扩展InstrumentationTestCase,然后使用getInstrumentation()来访问testing应用程序的上下文getContext() – 下面是使用上述build议的简短代码片段:

 public class PrintoutPullParserTest extends InstrumentationTestCase { public void testParsing() throws Exception { PrintoutPullParser parser = new PrintoutPullParser(); parser.parse(getInstrumentation().getContext().getResources().getXml(R.xml.printer_configuration)); } } 

正如你可以在getTestContext() 源代码中getTestContext()getTestContext()方法是隐藏的。

 /** * @hide */ public Context getTestContext() { return mTestContext; } 

您可以使用reflection绕过@hide注释。

只需在你的AndroidTestCase添加以下方法:

 /** * @return The {@link Context} of the test project. */ private Context getTestContext() { try { Method getTestContext = ServiceTestCase.class.getMethod("getTestContext"); return (Context) getTestContext.invoke(this); } catch (final Exception exception) { exception.printStackTrace(); return null; } } 

然后随时调用getTestContext() 。 🙂

您应该从AndroidTestCase而不是TestCase扩展。

AndroidTestCase类概述
如果您需要访问资源或其他依赖于活动上下文的东西,请将其扩展。

AndroidTestCase – Android开发者

如果您只需要访问项目的资源,则可以使用ActivityInstrumentationTestCase2类的 getActivity()方法:

  //... private YourActivityClass mActivity; @Override protected void setUp() throws Exception { //... mActivity = getActivity(); } //... public void testAccessToResources() { String[] valueList; valueList = mActivity.getResources().getStringArray( com.yourporject.R.array.test_choices); } 

其他答案已经过时。 现在,每当您扩展AndroidTestCase时,都可以使用mContext Context对象。