gpt4 book ai didi

android - 使用 fragment 对 Android 应用程序进行 JUnit 测试

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:01:13 34 4
gpt4 key购买 nike

我的 Android 应用程序是基于单一 Activity 、基于多个 fragment 的模型构建的。我需要对应用程序进行单元测试。我可以为包含使用 ActivityInstrumentationTestCase2 JUnit 的所有 Activity 的应用程序编写单元测试用例,但不能为包含 fragment 的应用程序编写单元测试用例。请建议为 fragment 编写 JUnit 测试用例的方法。

谢谢

最佳答案

参见 Android: Testing fragments

Copied for your reading pleasure with edits made for getFragmentManager() vs getSupportFragmentManager() and android:exported="false":

如果您想单独测试一个 fragment ,您需要创建一个测试 FragmentActivity,以便您的测试可以使用它。测试 Activity 看起来像这样。请记住在您的应用程序的 list 中声明它:

 public class TestFragmentActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.activity_fortests);
}
}

布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:id="@+id/activity_test_fragment_linearlayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
/>
</RelativeLayout>

安卓 list :

 ...
<activity
android:name="your.package.name.TestFragmentActivity"
android:exported="false" />
...

然后在你的测试项目中,你可以有一个这样的类来启动 fragment :

  public class FrameworkObjectsGeneratorFragmentTest 
extends ActivityInstrumentationTestCase2<TestFragmentActivity> {
private TestFragmentActivity mActivity;

public FrameworkObjectsGeneratorFragmentTest() {
super(TestFragmentActivity.class);
}

@Override
protected void setUp() throws Exception {
super.setUp();
mActivity = getActivity();
}

private Fragment startFragment(Fragment fragment) {
FragmentTransaction transaction = mActivity.getFragmentManager().beginTransaction();
transaction.add(R.id.activity_test_fragment_linearlayout, fragment, "tag");
transaction.commit();
getInstrumentation().waitForIdleSync();
Fragment frag = mActivity.getFragmentManager().findFragmentByTag("tag");
return frag;
}

public void testFragment() {
FrameworkObjectsGeneratorFragment fragment = new FrameworkObjectsGeneratorFragment() {
//Override methods and add assertations here.
};

Fragment frag = startFragment(fragment);
}
}

startFragment() 方法将您指定的 fragment 添加到 TestActivity 中的 ViewGroup。

与 Activity 相比,测试 fragment 的好处在于您可以扩展 fragment 以覆盖 protected 字段和方法,您可以在其中添加断言。

注意:如果您正在使用支持库,请调用 getSupportFragmentManager()。

关于android - 使用 fragment 对 Android 应用程序进行 JUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21156463/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com