我對使用最近發佈的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