Ошибка Android HelloWorldTest от Google - получает нулевой указатель при получении ресурса

1

Я использую учебник HelloAndroidTest от Google:

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
    assertNotNull терпит неудачу или вы получаете NPE (как упоминается в заголовке)?
  • 0
    Правильно, в этом случае assert not null завершается ошибкой на нулевом указателе, корректируется заголовок.
Показать ещё 1 комментарий
Теги:
unit-testing
junit

2 ответа

0
Лучший ответ

Думаю, у меня это есть. Похоже, что деятельность должна быть создана в самом методе тестирования. Как только я переехал туда, он отлично работает. Документация getActivity фактически утверждает что-то в этом роде, и это, наконец, привело меня в замешательство. По словам бессмертного MLK-Free наконец-то, наконец, бесплатно - наконец.

  • 0
    Хотя это и исправило, когда я переделал HelloWorldTest, он работал нормально и не нуждался в этом исправлении. У меня не было времени, чтобы отследить, что я сделал неправильно в первую очередь.
1

Глядя на ваше первое представление кода, я не думаю, что setUp принимает любые параметры, поэтому ваш переопределенный метод с параметром никогда не будет вызван, и поэтому все ваши экземпляры vars равны нулю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню