Jac*_*ble 6 android unit-testing robolectric
这与在Android上使用Robolectric框架进行单元测试有关.我在代码上得到一个空指针异常,正常运行时没有问题.我刚刚开始使用机器人,所以它可能非常简单.
以下是测试的调用代码:
@Test
public void testInitUtilsInitSequenceNumberIsRandom() {
// create an activity for reference
InitUtils initUtils = new InitUtils();
// do static initialization to parse questions into memory
InitUtils.initialize(initUtils); // <============ the call from roboelectric framework
// retreive app state
AppState appState = (AppState) initUtils.getApplicationContext();
// fill in later
fail("not implemented");
}
Run Code Online (Sandbox Code Playgroud)
这是在InitUtils中调用的方法崩溃
/***将XML加载到{@see mQuestions}类成员变量**/
public static void initializeQuestions(Activity activity, AppState appState) {
/* create XML Parser */
XmlResourceParser questionBatch;
/* local question variable */
Question question = null;
/* retrieve the XML for parsing */
// =============== This returns null ==============================
questionBatch = activity.getResources().getXml(R.xml.questions);
/* Parse the XML */
int eventType = -1;
/* iterate through XML */
while (eventType != XmlResourceParser.END_DOCUMENT) {
if (eventType == XmlResourceParser.START_TAG) {
/* Get the questions */
// ================================= NPE exception ======================
String strName = questionBatch.getName();
...etc
Run Code Online (Sandbox Code Playgroud)
为了检索资源,我需要做些什么特别的事情吗?
我对 Robolectric 的事情一无所知,但是 getResources() 返回 null 意味着它是在框架调用 Activity.onCreate() 之前被调用的。我不知道你从哪里得到这个 Activity,但如果你在 Instrumentation 之上进行单元测试,你需要确保你的 Instrumentation 线程阻塞,直到主线程完成执行,使用类似:
http://developer.android.com/reference/android/app/Instrumentation.html#waitForIdleSync()
如果您正在使用 startActivitySync,这将为您完成:
| 归档时间: |
|
| 查看次数: |
1513 次 |
| 最近记录: |