谷歌的Android HelloWorldTest失败 - 在检索资源时收到空指针

时间:2011-03-31 21:40:14

标签: android unit-testing junit

我正在使用Google的HelloAndroidTest教程:

http://developer.android.com/resources/tutorials/testing/helloandroid_test.html

这是测试类:

package com.example.helloandroid.test;

import com.example.helloandroid.HelloAndroid;

import android.test.ActivityInstrumentationTestCase2;
import android.widget.TextView;

public class HelloAndroidTest extends
        ActivityInstrumentationTestCase2<HelloAndroid> {

    private HelloAndroid mActivity;
    private String resourceString;
    private TextView mView;

    public HelloAndroidTest() {
        super("com.example.helloandroid", HelloAndroid.class);
    }


    protected void setUp(TextView mView) throws Exception {
        super.setUp();
        mActivity = this.getActivity();
        mView = (TextView) mActivity
                .findViewById(com.example.helloandroid.R.id.textview);
        resourceString = mActivity
                .getString(com.example.helloandroid.R.string.hello);
    }

    public void testPreconditions() {
        assertNotNull(mView);       // <== always null
        //System.out.println("Resourse string: " + resourceString);
        //assertNotNull(resourceString); // <== always null (when run)
    }

    public void testText() {
        assertEquals(resourceString, (String) mView.getText());
    }
}

这是HelloAndroid类:

package com.example.helloandroid;


import android.app.Activity;

import android.os.Bundle;

    public class HelloAndroid extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
    }

这是main.xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@+id/textview" xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:text="@string/hello"/>

和strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello Android!</string>
    <string name="app_name">Hello, Android</string>
</resources>

mView和资源字符串都无法通过各自的notNull测试。

这是非常基本的,但它确实需要成功创建活动并从HelloAndroid项目中提取资源,这是我需要进行单元测试的功能。有想法该怎么解决这个吗?

2 个答案:

答案 0 :(得分:1)

看看你提交的第一个代码,我不认为setUp会接受任何参数,因此带有参数的重写方法永远不会被调用,因此你的所有实例变量都是null。

答案 1 :(得分:0)

我想我已经明白了。看起来需要在测试方法本身中创建活动。一旦我把它移到那里,它工作正常。 getActivity文档实际上说明了这个效果,这最终让我了解了。用不朽的MLK的话来说 - 终于免费,终于免费 - 最后免费。