使用Espresso测试第三方认证流程

时间:2018-03-14 23:35:01

标签: android android-espresso

我正在为Activity撰写Espresso测试,其中包含用于使用Google帐户进行身份验证的按钮以及用于使用Facebook帐户进行身份验证的按钮。在我的测试中,我想模拟每个按钮上的点击,并确保它启动这些第三方提供的正确组件。

似乎有两种可能的选择:

  1. 模拟相应按钮的单击并确保UI包含预期的视图。
  2. 模拟相应按钮的点击,确保触发了正确的Intent
  3. 我最初选择了#2选项,因为我发现使用Activity测试之外的组件测试用户界面很困难。

    首先,我为Google按钮创建了一个测试。代码如下:

    @Test
    public void testGoogleAuthButton() {
        // Start the Activity under test.
        activityRule.launchActivity(new Intent());
    
        // Click the Google button.
        onView(withId(R.id.googleSignUpButton)).perform(click());
    
        // Ensure the `SignInHubActivity`, an `Activity` provided by the Google APIs, was launched.
        intended(hasComponent(SignInHubActivity.class.getName()), times(1));
    
        // Simulate a press on the back button to close the account chooser.
        UiDevice.getInstance(getInstrumentation()).pressBack();
    }
    

    此测试通过,但我不确定这是否是执行此测试的正确方法。接下来,我为Facebook按钮尝试了类似的技术:

    @Test                                                                  
    public void testFacebookAuthButton() {                                 
        // Start the Activity under test.                           
        activityRule.launchActivity(intent);                               
    
        // Simulate a click on the Facebook button.                                                                   
        onView(withId(R.id.facebookSignUpButton)).perform(click());        
    
        // Ensure the `FacebookActivity`, an `Activity` provided by the Facebook APIs, was launched.                                                                   
        intended(hasComponent(FacebookActivity.class.getName()), times(1));
    
        // Simulate a press on the back button to close the current Activity.                                                                   
        UiDevice.getInstance(getInstrumentation()).pressBack();                                           
    
    }
    

    奇怪的是,这个测试失败了,并注意到没有Intent匹配且没有记录。

    我的问题:

    1. 上面显示的代码是否代表了测试这些流程的正确方法?
    2. 为什么上面显示的Facebook版本测试失败,而Google版本没有?

0 个答案:

没有答案