我逐字地遵循了Android的Hello, Testing教程,但是当我运行它时,我收到以下故障跟踪的错误:
java.lang.NullPointerException
at com.example.helloandroid.test.HelloAndroidTest.testText(HelloAndroidTest.java:72)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:204)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:194)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:186)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:520)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
testText()的单个语句中出现异常:
public void testText() {
assertEquals(resourceString,(String)mView.getText());
}
我不明白为什么我收到此空指针异常,因为resourceString
和mView
都在onCreate()
初始化:
@Override
protected void setUp() 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);
}
在这么简单的应用程序中有什么可以解释的?
答案 0 :(得分:3)
回答我自己的问题:Hello, Testing教程是针对“Hello,Android”的XML version制作的,而不是第二个dynamically constructed版本。
我通过修改HelloAndroid的onCreate()
:
if (false) { // don't use main.xml layout
TextView tv = new TextView(this);
tv.setText("Hello, Android");
setContentView(tv);
}
else
setContentView(R.layout.main);
答案 1 :(得分:1)
我不是肯定的,但我认为你试图作为一个字符串强制转换的方式可能是问题的一部分。尝试使用mView.getText()。toString(),而不是按照现在的方式进行投射。
public void testText() {
assertEquals(resourceString,(String)mView.getText());
}
答案 2 :(得分:1)
我修复它将@UiThreadTest添加到测试中,如下所示:
@UiThreadTest
public void testText() {
assertEquals(resourceString,(String)mView.getText());
}
我希望它有所帮助。