如何测试嵌套片段?

时间:2013-10-24 12:44:21

标签: android unit-testing junit android-fragments robolectric

我有一个工作正常的应用程序。但是我决定开始为它进行测试。 但现在我遇到了一些问题:

我的应用程序使用嵌套的Fragments来使用不同的堆栈。我想测试嵌套在另一个Fragment“FragmentOuterInfo”中的特定Fragment“FragmentInfo”。 我的测试运行正常,直到我想调用“FragmentOuterInfo”的ChildFragmentManager。我收到这个错误:

FATAL EXCEPTION: main
java.lang.IllegalStateException: No activity
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1075)...

我知道有一个名为robolectric的框架,但首先我想知道问题是什么,以及是否可以使用ChildFragmentManager进行测试。 也许有人知道测试嵌套Fragments的好方法。 我很欣赏任何提示。

我的代码:

public class FragmentInfoTest extends ActivityInstrumentationTestCase2<MainActivity> {

    // KONSTANTE
    private static final String PKG = "com.example";
    private static final int MENU_INFO = com.example.R.id.info;

    // MEMBER
    private MainActivity mActivity;
    private FragmentInfo mFragInfo;


    // KONSTRUKTOR
    public FragmentInfoTest() {
        super(PKG, MainActivity.class); // calls Superclass with pkg & class under test
        // TODO Auto-generated constructor stub
    }

    @Override
    protected void setUp() throws Exception{
        super.setUp();
        // turn TouchMode off
        setActivityInitialTouchMode(false);

        // get MainActivity
        mActivity = getActivity();

        // click on MenuItem "INFO" 
            // -> I also see the FragmentInfo for a short time
        // so it has been init!
        getInstrumentation().invokeMenuActionSync(mActivity, MENU_INFO, 0);

    }

    public void testPreConditions(){
        // get outer Fragment
        FragmentOuterInfo infoOuter = mActivity.getFragmentOuterInfo();
        assertNotNull(infoOuter); // this check is fine


        // Here I get the error:
        FragmentManager manager = infoOuter.getChildFragmentManager();
        assertNotNull(manager);

    }
}

其他信息:

  • IDE:Android Studio 0.2.10
  • 我是单位测试的新手:)

如果您需要完整的Stacktrace - &gt;告诉我。 谢谢!

0 个答案:

没有答案