我Activity
包含的Fragments
很少,现在我想测试其中一个Fragment
,但我想分别测试和测试所选{{1}的核心功能不要打扰主Fragment
中发生的事情。
我的想法是创建一个模拟Activity
,它只会在Activity
方法中添加Fragment
。然后我会做一些测试。但我不想将mock 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
模拟?
干杯