我正在使用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项目中提取资源,这是我需要进行单元测试的功能。有想法该怎么解决这个吗?
答案 0 :(得分:1)
看看你提交的第一个代码,我不认为setUp会接受任何参数,因此带有参数的重写方法永远不会被调用,因此你的所有实例变量都是null。
答案 1 :(得分:0)
我想我已经明白了。看起来需要在测试方法本身中创建活动。一旦我把它移到那里,它工作正常。 getActivity文档实际上说明了这个效果,这最终让我了解了。用不朽的MLK的话来说 - 终于免费,终于免费 - 最后免费。