Android Espresso:如何创建可以启动具有不同活动的单独测试类的测试套件?

Bor*_*rov 1 java testing junit android android-espresso

我刚刚开始研究 Espresso 测试,但我搜索了 throw StackOverFlow 主题,但找不到满足我需求的解决方案。


我的问题的史前史:

我有很多活动的 android 应用程序。通常为应用程序的不同流创建单独的 UI 测试(每个流都需要单独的活动,所以这就是我在不同的类中实现测试的原因)。在我的情况下,背景和 UI usync 发生,这就是为什么我不能从第一个活动开始并继续进行下一个和下一个。我找到的唯一解决方案并且它确实适用于当前的应用程序 - 将空闲资源用于应用程序活动。

问题:所以 现在我想了解如何将所有这些单独的类(每个类使用自己的规则和这些规则的活动)放到功能套件中?


我的经验:

1)正面- 使用需要更改开发人员源代码的空闲资源,但套件中仍然只有一项活动:

@RunWith(AndroidJUnit4.class
public class forSeveralActs {
@Rule
public final ActivityTestRule<TargetedActivity> mTargetedActivityRule = new ActivityTestRule<>(TargetedActivity.class, true, true);`

final String username = "test@mail.com";
final String password = "12345678";
private IdlingResource mIdlingRecourse;

@Before
public void setIdleResource() {
    mIdlingRecourse = mTargetedActivityRule.getActivity().getIdlingResource();
    Espresso.registerIdlingResources(mIdlingRecourse);
}

@Test
public void PassPermission_and_goto_MainActivity() {
    // First activity - LoginActivity
    Espresso.onView(withId(R.id.activity_login_et_login))
            .perform(ViewActions.typeText(username));

    Espresso.onView(withId(R.id.activity_login_et_password))
            .perform(ViewActions.typeText(password))
            .perform(closeSoftKeyboard());

    Espresso.onView(withId(R.id.activity_login_btn_login))
            .check(matches(isDisplayed()))
            .check(matches(isClickable()))
            .perform(ViewActions.click());

  // Here is elements of second activity - MainActivity, without idling methods I can't reach this element
    Espresso.onView(withId(R.id.helpMeCard_title))
            .check(matches(withText("help_me")));
}

@After
public void unregisteredIdlingResource() {
    if (mIdlingRecourse != null) {
        Espresso.unregisterIdlingResources(mIdlingRecourse);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以在这个例子中,我有几个测试,最后一个将在下一个活动中执行。


2)否定- 我试图通过 JUnit 测试套件启动我的所有测试(类),所以我只是将我所有的类(其中还包括测试和活动的规则)放到 Junit 套件中(这种情况不适用于全部):

@RunWith(Suite.class)
@Suite.SuiteClasses(
    {
            ESP_test1.class,
            ESP_test2.class,
            ESP_test3.class
    })

public class ESP_start {}
Run Code Online (Sandbox Code Playgroud)

这是我在上面发布的相同问题: 如何从使用不同活动和规则的单独测试创建套件,它应该是什么样子?

Bor*_*rov 5

以防万一,也许答案对其他人有用,这个套件是正确的,以前我在我的测试类中使用过参数。在这种情况下,应用程序测试类应该是空的,没有任何参数:

@RunWith(Suite.class)
@Suite.SuiteClasses(
    {
            ESP_test1.class,
            ESP_test2.class,
            ESP_test3.class
    })

public class ESP_start {} 
Run Code Online (Sandbox Code Playgroud)