我的Activity
内容很少Fragments
,现在我想测试其中之一,Fragment
但我想分开测试并仅测试 selected 的核心功能,Fragment
而不打扰 main 中发生的事情Activity
。
我的想法是创建一个Activity
只添加方法Fragment
的模拟。onCreate()
然后我会做一些测试。但我不想Activity
在我的主要项目中包含模拟,我宁愿将它包含在测试项目中。所以我做了这样的事情:
我创建了
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(); } }
我想像这样测试它:
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
模拟?
干杯