ActivityMock for Fragment在测试项目中

时间:2012-10-17 09:14:10

标签: android android-testing

Activity包含的Fragments很少,现在我想测试其中一个Fragment,但我想分别测试和测试所选{{1}的核心功能不要打扰主Fragment中发生的事情。

我的想法是创建一个模拟Activity,它只会在Activity方法中添加Fragment。然后我会做一些测试。但我不想将mock onCreate()包含在我的主项目中,我宁愿将其包含在测试项目中。所以我做了这样的事情:

  1. 我创建了Activity

    MockActivity
  2. 我想这样测试一下:

    public final class ActivityMock extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            FragmentTransaction t = getFragmentManager().beginTransaction();
            MyFragment f = new MyFragment();
            t.add(f, "MY_FRAGMENT");
            t.commit();
        }
    }
    
  3. 问题在于我收到错误:

    public final class MyFragmentTest extends
    ActivityInstrumentationTestCase2<ActivityMock> {
    
        public MyFragmentTest() {
            super(ActivityMock.class);
        }
    
        public void testSomething() {
            ActivityMock mActivity = getActivity();
            //do some assertions
        }
    }
    

    好的,接下来我尝试修改测试项目 java.lang.RuntimeException: Unable to resolve activity for: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.example/.test.ActivityMock }

    AndroidManifest.xml

    但是我得到了同样的错误。我认为这是因为无论如何在测试运行期间主项目被搜索 <activity android:name=".ActivityMock" /> 。所以我试着添加

    ActivityMock

    我不知道这是不是一个好主意,但主要的想法是测试项目将能够测试(仪器)本身。但现在我明白了:

        <instrumentation
            android:name="android.test.InstrumentationTestRunner"
            android:targetPackage="com.example.test" />
    

    所以我认为修改过的 junit.framework.AssertionFailedError: Exception in constructor: testSomething (java.lang.NoClassDefFoundError: com.example.test.ActivityMock 有效,但仍在主项目中搜索AndroidManifest.xml类,尽管它在测试项目中。 我假设ActivityMock方法总是在主项目中查找活动类。

    是否有人试图以这种方式测试getActivity()并且能够创建Fragment模拟?

    干杯

0 个答案:

没有答案