2016-05-10 5 views
5

Мне нужно протестировать одно действие в моем приложении для Android. В документации ActivityInstrumentationTestCase2 указано:ActivityInstrumentationTestCase2 vs ActivityTestRule

Этот класс обеспечивает функциональное тестирование одного действия.

И документация ActivityTestRule говорит:

Это правило обеспечивает функциональное тестирование одной деятельности.

Почти одинаковые слова. Помимо двух образцов, которые я закодировал, сделайте то же самое. Так что я должен предпочесть ActivityTestRule за ActivityInstrumentationTestCase2 или наоборот?

То, что я вижу, что расширение ActivityInstrumentationTestCase2 выглядит JUnit3 стилизованного испытания (его предок junit.framework.TestCase и методы испытаний должны начинаться со слова test).

Использование ActivityTestRule

package sample.com.sample_project_2; 

import android.support.test.rule.ActivityTestRule; 
import android.support.test.runner.AndroidJUnit4; 
import android.test.suitebuilder.annotation.LargeTest; 

import org.junit.Rule; 
import org.junit.Test; 
import org.junit.runner.RunWith; 

import static android.support.test.espresso.Espresso.onView; 
import static android.support.test.espresso.action.ViewActions.typeText; 
import static android.support.test.espresso.matcher.ViewMatchers.withId; 

@RunWith(AndroidJUnit4.class) 
@LargeTest 
public class ApplicationTest { 

    @Rule 
    public ActivityTestRule<SecAct> mActivityRule = new ActivityTestRule(SecAct.class); 

    @Test 
    public void foo() { 
     onView(withId(R.id.editTextUserInput)).perform(typeText("SAMPLE")); 

    } 
} 

Расширение ActivityInstrumentationTestCase2

package sample.com.sample_project_2; 

import android.test.ActivityInstrumentationTestCase2; 

import static android.support.test.espresso.Espresso.onView; 
import static android.support.test.espresso.action.ViewActions.typeText; 
import static android.support.test.espresso.matcher.ViewMatchers.withId; 


public class ApplicationTest2 extends ActivityInstrumentationTestCase2<SecAct> { 

    public ApplicationTest2() { 
     super(SecAct.class); 
    } 

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


    public void testFoo2() { 
     onView(withId(R.id.editTextUserInput)).perform(typeText("SAMPLE 2")); 

    } 
} 

ответ

1

Для примера, нет никакой разницы. Вы можете использовать любой из них.

В соответствии с принципом OO «Предпочитаем состав над наследованием». Использование ActivityTestRule<> осуществляется через композицию, а ActivityInstrumentationTestCase2<> - это наследование.

Иногда я предпочитаю иметь общий базовый класс для своих тестовых классов для повторного использования общих инициализаций. Это помогает мне сгруппировать тесты в соответствии с темой. ActivityTestRule<> позволяет мне делать такие вещи.

По этим причинам я предпочитаю ActivityTestRule<>. В противном случае я не видел никакой разницы.

 Смежные вопросы

  • Нет связанных вопросов^_^