sec*_*lpb 28 junit android android-fragments android-support-library
我在使用最近发布的Fragment支持API的Android应用程序执行android单元测试时遇到问题.对FragmentActivity运行测试时,日志中会显示以下错误,并且无法加载类.当针对相同的类运行,但是从Activity派生的那个时,测试工作正常.这两个类都可以正常用作应用!这意味着只需调用它们就可以正确显示它们的布局和功能.支持jar是构建路径的一部分,并包含在项目中.
我遇到的问题是利用片段(并支持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;
Run Code Online (Sandbox Code Playgroud)
这是我为证明问题而构建的代码.测试用例只是尝试实例化测试中的类:
FrameLayoutTest.java
public class FrameLayoutTest extends
ActivityInstrumentationTestCase2<FragmentLayoutSupport> {
public FrameLayoutTest() {
super(FragmentLayoutSupport.class);
}
public void testActivityTestCaseSetUpProperly() {
assertNotNull("activity should be launched successfully", getActivity());
}
}
Run Code Online (Sandbox Code Playgroud)
我创建的两个类如下,fragment_layout是一个空的LinearLayout:
FrameLayout.java
public class FragmentLayout extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_layout);
}
}
Run Code Online (Sandbox Code Playgroud)
和
FragmentLayoutSupport.java
public class FragmentLayoutSupport extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_layout);
}
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*umb 50
我在这上半夜,终于找到了解决方案.关键是:
04-05 18:00:11.276, (Lcom/example/android/app/FragmentLayoutSupport; had used a different Landroid/support/v4/app/FragmentActivity; during pre-verification).
Run Code Online (Sandbox Code Playgroud)
问题是您在测试项目中使用的android-support-v4.jar与应用程序项目中的不同.从测试项目中删除对android-support-v4.jar的所有引用.然后转到您的应用程序项目Properties-> Java Build Path-> Order and Export并检查android-support-v4.jar以将其导出.现在两个项目都将使用相同的库,dalvik不会抱怨.