在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对象。
- 用Proguard编译给出SimException:“局部variablestypes不匹配”
- 是否有可能从底部填充ListView?
- 接收器未注册exception错误?
- android getIntrinsicHeight和getIntrinsicWidth是什么意思?
- Android:ProgressDialog.show()使用getApplicationContext崩溃
- 当你testingActionBarActivity的时候,你需要使用Theme.Appcompat主题
- 在android sqlite数据库中的rawquery和execSQL之间的区别
- 无尽的RecyclerView与ProgressBar分页
- 适用于Android和iOS的2D跨平台游戏引擎?