android单独测试frgment,Android – Independent Fragment UI测试工具

我正在使用自定义FragmentTestRule和Espresso来隔离测试我的每个碎片.

我有一个专门的TestActivity,在我的应用程序中显示测试的碎片.在我的情况下,Activity仅存在于调试变体中,因为我的检测测试针对debug运行.

1.在src / debug / java / your / package / TestActivity.java中创建一个TestActivity,其中包含一个内容视图,其中将测试的片段添加到:

@VisibleForTesting

public class TestActivity extends AppCompatActivity {

@Override

protected void onCreate(@Nullable final Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

FrameLayout frameLayout = new FrameLayout(this);

frameLayout.setId(R.id.container);

setContentView(frameLayout);

}

}

2.为调试变量创建AndroidManifest.xml并声明TestActivity.这是测试时启动TestActivity所必需的.将此Manifest添加到src / debug / AndroidManifest.xml中的调试变量中:

3.在src / androidTest / java / your / test / package / FragmentTestRule.java中的androidTest变体中创建FragmentTestRule:

public class FragmentTestRule extends ActivityTestRule {

private final Class mFragmentClass;

private F mFragment;

public FragmentTestRule(final Class fragmentClass) {

super(TestActivity.class, true, false);

mFragmentClass = fragmentClass;

}

@Override

protected void afterActivityLaunched() {

super.afterActivityLaunched();

getActivity().runOnUiThread(() -> {

try {

//Instantiate and insert the fragment into the container layout

FragmentManager manager = getActivity().getSupportFragmentManager();

FragmentTransaction transaction = manager.beginTransaction();

mFragment = mFragmentClass.newInstance();

transaction.replace(R.id.container, mFragment);

transaction.commit();

} catch (InstantiationException | IllegalAccessException e) {

Assert.fail(String.format("%s: Could not insert %s into TestActivity: %s",

getClass().getSimpleName(),

mFragmentClass.getSimpleName(),

e.getMessage()));

}

});

}

public F getFragment(){

return mFragment;

}

}

4.然后你可以单独测试片段:

public class MyFragmentTest {

@Rule

public FragmentTestRule mFragmentTestRule = new FragmentTestRule<>(MyFragment.class);

@Test

public void fragment_can_be_instantiated() {

// Launch the activity to make the fragment visible

mFragmentTestRule.launchActivity(null);

// Then use Espresso to test the Fragment

onView(withId(R.id.an_id_in_the_fragment)).check(matches(isDisplayed()));

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值