我对使用最近发布的Fragment支持API的android应用程序执行android单元测试有问题。当测试针对FragmentActivity运行时,日志中会显示以下错误,并且类无法加载。当针对相同的类运行时,但是从Activity导出的测试运行良好。这两个类都可以正常工作这意味着,只需调用它们都可以正确显示其布局和功能。支持jar是构建路径的一部分,并包含在项目中。FragmentActivity不能通过ActivityInstrumentationTestCase2测试
我遇到的问题是利用碎片(并支持pre3.0 android)的唯一方法是利用FragmentActivity,但如果不包括自动化测试,那么这个库有什么好处。
4-05 18:00:11.276: WARN/dalvikvm(1095): Class resolved by unexpected DEX: Lcom/example/android/app/FragmentLayoutSupport;(0x406351a0):0x12e5c8 ref [Landroid/support/v4/app/FragmentActivity;] Landroid/support/v4/app/FragmentActivity;(0x406351a0):0x12e440
04-05 18:00:11.276: WARN/dalvikvm(1095): (Lcom/example/android/app/FragmentLayoutSupport; had used a different Landroid/support/v4/app/FragmentActivity; during pre-verification)
04-05 18:00:11.286: WARN/dalvikvm(1095): Unable to resolve superclass of Lcom/example/android/app/FragmentLayoutSupport; (49)
04-05 18:00:11.286: WARN/dalvikvm(1095): Link of class 'Lcom/example/android/app/FragmentLayoutSupport;' failed
04-05 18:00:11.286: ERROR/dalvikvm(1095): Could not find class 'com.example.android.app.FragmentLayoutSupport', referenced from method com.example.android.app.test.FrameLayoutTest.<init>
04-05 18:00:11.286: WARN/dalvikvm(1095): VFY: unable to resolve const-class 131 (Lcom/example/android/app/FragmentLayoutSupport;) in Lcom/example/android/app/test/FrameLayoutTest;
这是我构建的代码来演示问题。测试用例只是试图将类实例测试:
FrameLayoutTest.java
public class FrameLayoutTest extends
ActivityInstrumentationTestCase2<FragmentLayoutSupport> {
public FrameLayoutTest() {
super(FragmentLayoutSupport.class);
}
public void testActivityTestCaseSetUpProperly() {
assertNotNull("activity should be launched successfully", getActivity());
}
}
两个班,我创建如下所示,并且fragment_layout是空的LinearLayout:
FrameLayout.java
public class FragmentLayout extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_layout);
}
}
而且
FragmentLayoutSupport.java
public class FragmentLayoutSupport extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_layout);
}
}
这正是它。我在调试日志中看到了这一行,但它将我抛弃了。我以为这是说我使用了不同版本的android-support-v4.jar,我没有。我想现在发生的事情是每个项目的构建与它自己的那个jar文件的链接导致了两个唯一编码的dex文件。非常棘手,很好解决。我几乎准备好放弃碎片,因为所有实际目的,如果您使用支持库,则无法检测。 – securelpb 2011-04-15 05:38:42
你是一个拯救生命的人 - 这已经让我陷入了三个小时的困境。 – tomtheguvnor 2011-10-28 17:52:49
为什么不被接受为正确答案? – Bostone 2012-11-16 16:38:53