ActivityInstrumentationTestCase2 vs ActivityTestRule

时间:2016-05-10 13:51:59

标签: android unit-testing junit4 junit3

我需要在Android应用中测试一项活动。 $data的文档说:

  

此类提供单个活动的功能测试。

ActivityInstrumentationTestCase2的文档说:

  

此规则提供单个活动的功能测试。

几乎一样的话。除了我编码的两个样本外,还要做同样的事情。我应该更喜欢ActivityTestRule而不是ActivityTestRule,反之亦然?

我看到扩展ActivityInstrumentationTestCase2看起来像JUnit3样式的测试(它的祖先是ActivityInstrumentationTestCase2,测试方法应该以单词junit.framework.TestCase开头。)

使用ActivityTestRule

test

扩展ActivityInstrumentationTestCase2

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"));

    }
}

1 个答案:

答案 0 :(得分:2)

对于你的例子,没有区别。你可以使用它们中的任何一个。

根据OO原则,我们将“更喜欢构成而不是继承”。 ActivityTestRule<>的用法是通过合成,而ActivityInstrumentationTestCase2<>是继承。

有时,我更喜欢为我的测试类提供一个公共基类来重用常见的初始化。这有助于我根据主题对测试进行分组。 ActivityTestRule<>允许我做这些事情。

由于这些原因,我更喜欢ActivityTestRule<>。否则,我没有看到任何差异。