2

我的Activity内容很少Fragments,现在我想测试其中之一,Fragment但我想分开测试并仅测试 selected 的核心功能,Fragment而不打扰 main 中发生的事情Activity

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

  1. 我创建了MockActivity

    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();
        }
    }
    
  2. 我想像这样测试它:

    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这种方式并能够创建Activity模拟?

干杯

4

0 回答 0