【问题标题】:Android Espresso: How to create test-suite which may launch separate test classes with different activities?Android Espresso:如何创建可以启动具有不同活动的单独测试类的测试套件?
【发布时间】:2017-10-22 20:15:58
【问题描述】:

我刚刚开始研究 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);
        }
    }
}

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


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

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

public class ESP_start {}

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

【问题讨论】:

    标签: java android testing junit android-espresso


    【解决方案1】:

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

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

    【讨论】:

    • 我已经关闭了这个问题,如果有人有一些相关的问题-你可以问。
    • 我对 JUnit 和 Espresso 非常陌生,即使我的 TestSuite 类设置与此代码示例显示的方式相同,我也收到有关初始化和“存根!”的错误。我不明白。我发现我的问题是我错误地尝试从 TestRunner 类启动/运行我定义的测试套件,而不是从 TestSuite 类(空的 body 类)启动它们。如果您正在阅读本文并遇到同样的问题,尝试从 TestSuite 类开始您的测试。
    【解决方案2】:

    另外,你可以像这样在 kotlin 中使用,参考下面的代码。

    @RunWith(Suite::class)
    @Suite.SuiteClasses(
        ESP_test1::class,
        ESP_test2::class,
        ESP_test3::class,
        ESP_test4::class
    )
    class TestSuite
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多