如何使用Robolectric将意图传递给Fragment

时间:2017-04-03 19:12:55

标签: android unit-testing robolectric

我通过以下方式传递来自其他活动的意图:

Intent intent = new Intent(getActivity(), MyActivity.class);
intent.putExtra("type, "email);
startActivity(intent);

在我的片段中,我有:

Intent intent = getActivity().getIntent();
String viewType = intent.getStringExtra("type);

在Robolectric 3.3中,我通过以下方式设置我的活动和片段:

mMyActivity = Robolectric.setupActivity(mMyActivity.class);

mMyFragment = new mMyFragment();
SupportFragmentTestUtil.startVisibleFragment(mMyFragment);

如何将意图发送到MyActivity类,以便片段可以正确调用getActivity().getIntent().getStringExtra("type");

2 个答案:

答案 0 :(得分:0)

你可以这样做:

Intent intent = new Intent(getActivity(), MyActivity.class);
intent.putExtra("type, "email);
Robolectric.buildActivity(MainActivity.class, intent).create().start().resume()

答案 1 :(得分:0)

对于仍然想要解决这个问题的每个人,我找到了一个解决方案:

在浏览Roboelectric的源代码后,您可以看到这些是相关的方法:

public class SupportFragmentTestUtil {

    public static void startVisibleFragment(Fragment fragment) {
        buildSupportFragmentManager(FragmentUtilActivity.class)
            .beginTransaction().add(1, fragment, null).commit();
    }

    private static FragmentManager buildSupportFragmentManager(Class < ? extends FragmentActivity > fragmentActivityClass) {
        FragmentActivity activity = Robolectric.setupActivity(fragmentActivityClass);
        return activity.getSupportFragmentManager();
    }
}

public class Robolectric {

    public static < T extends Activity > T setupActivity(Class < T > activityClass) {
        return buildActivity(activityClass).setup().get();
    }
}

所以我们可以使用Intent做同样的事情:

MyFragment myFragment = new MyFragment()

Intent intent = new Intent(
    ShadowApplication.getInstance().applicationContext,
    MyActivity::class.java
)

intent.putExtra("type", "email")

MyActivity activity = Robolectric.buildActivity(MyActivity.class, intent).setup().get()

activity.getSupportFragmentManager.beginTransaction().add(1, myFragment, null).commit()

它为我工作(甚至在Kotlin)

此外,我将打开一个Pull Request来添加一个方法,允许启动具有特定意图的片段,以查看它是否被添加到Roboelectric的下一个版本中。