ActivityInstrumentationTestCase2 и использование статических финалов: поля становятся нулевыми после первого теста - PullRequest
3 голосов
/ 09 июля 2011

Похоже, что происходит какое-то волшебство, и мне интересно понять, почему это происходит:)

Вот мой юнит-тест:

public class SelectThemeActivityTest 
    extends ActivityInstrumentationTestCase2<SelectThemeActivity> {

    private final static int[] STATIC_ARRAY = { 0, 1, 2 };

    public SelectThemeActivityTest() {
        super("com.the7art.simplewallpaper", SelectThemeActivity.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        // some array usage here - will throw NullPointerEcxeption on second test
        // see description below
        STATIC_ARRAY[0] = 2;
    }

    @Override
    protected void tearDown() throws Exception {
        super.tearDown();
    }

    public void testFirst() {

    }
    public void testSecond() {

    }
    public void testThird() {

    }
}

Если яЗапустите этот тестовый пример. первый тест успешно завершится , а все остальные завершатся неудачно, выдав NullPointerException from setUp () - строку, которая пытается получить доступ к STATIC_ARRAY.

Еще больше меня удивляет тот факт, что если я изменю тестовый пример на расширение AndroidTestCase вместо ActivityInstrumentationTestCase2 , то все тесты пройдут успешно !Магия!: -)

Также, если я удаляю ключевое слово «static» из STATIC_ARRAY, тесты также успешно выполняются.

Так что ясно, что что-то модифицирует мой STATIC_ARRAY, делая его нулевым между выполнениями теста, скорее всегов tearDown () и что что-то имеет отношение к ActivityInstrumentationTestCase2 , но как отследить это что-то ?:-) Есть идеи?

Ответы [ 2 ]

3 голосов
/ 07 февраля 2012

Причина в том, что метод scrubClass () вызывается из super.tearDown (): обсуждение google-groups . Решение - переопределить этот метод .

1 голос
/ 09 июля 2011

Поставьте точку наблюдения на STATIC_ARRAY и посмотрите, кто ее модифицирует, хотя кандидатов не так уж много (так как поле является закрытым, есть только один кандидат, класс, который вы только что опубликовали, поэтому чего-то не хватает на картинке.

...