【问题标题】:How call from Espresso the fragment custom method?如何从 Espresso 调用片段自定义方法?
【发布时间】:2017-03-22 15:17:10
【问题描述】:

我在 Espresso 中编写测试来测试 MyFragment。好的。

需要在 MyFragment 中调用自定义方法 customUpdate() 的写入测试方法:

@Rule
    public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class, true, false);

 @Before
    public void init() {
        mActivityRule.launchActivity(intent);

        // Here forward to MyFragment
        onView(withId(R.id.myTextView)).perform(click());
    }

     @Test
     public void searchAddFavorite() {
       // update column in db 
       MyService.updateColumn(context, 123, Profile.MY_COLUMN_NAME, false);

       // here need to call fragment custom method customUpdate()  

      onView(withId(R.id.searchView)).perform(click());
    }

片段(MyFragment)中的自定义方法更改光标。

private void customUpdate() {
    cursor = MyService.getCursor(context, someFilter, true);
    contactAdapter.changeCursor(cursor);
}

我该怎么做?

【问题讨论】:

    标签: android android-espresso


    【解决方案1】:

    答案很简单:你需要获取activity中的fragment实例并调用方法。

    您如何做到这一点,主要取决于您在活动中添加片段的方式。您在交易期间是否使用tag? 如果没有,你可能应该。它将为您提供获取实例的最简单方法。如果您不知道该怎么做,请查看this

    如果你使用标签yourTag,那么你可以这样做:

    @Test
    public void searchAddFavorite() {
        // update column in db 
        MyService.updateColumn(context, 123, Profile.MY_COLUMN_NAME, false);
    
        MyFragment fragment = (MyFragment) mActivityRule.getActivity()
                                    .getSupportFragmentManager().findFragmentByTag("yourTag");  
        fragment.customUpdate();
    
        onView(withId(R.id.searchView)).perform(click());
    }
    

    也就是说,对我来说,听起来您不应该在这里执行 UI 测试。看来您应该研究常规的单元测试。

    【讨论】:

      猜你喜欢
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多