6

を使用Fragmentして、Android 互換パッケージを使用しましたandroid-support-v4.jar。しかし、これでJUnitテストを行うことはできません。

私のメインFragmentActivityクラスは次のように宣言されています

public class MyActivityClass extends FragmentActivity{
...............
}

次に、私のテストプロジェクトで

public class MyActivityClassTest extends ActivityInstrumentationTestCase2<MyActivityClass> {
    public MyActivityClassTest() {  
        super("com.android.myproject", MyActivityClass.class);
    }
    @Override
    protected void setUp() throws Exception {
        super.setUp();
        ...................
    }

    public void testPreconditions() {
        .................
    }
    public void testNotNull(){
        ................
    }
}

しかし、Produce Failure Trace として実行Android JUnit TestするFailedToCreateTests[Runner:Junit3]

java.lang.RuntimeException: Exception during suite construction
at android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests.testSuiteConstructionFailed(TestSuiteBuilder.java:239)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
Caused by: java.lang.reflect.InvocationTargetException
at com.android.myproject.test.MyActivityClassTest.<init>(MyActivityClassTest.java:28)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
at android.test.suitebuilder.TestMethod.instantiateTest(TestMethod.java:87)
at android.test.suitebuilder.TestMethod.createTest(TestMethod.java:73)
at android.test.suitebuilder.TestSuiteBuilder.addTest(TestSuiteBuilder.java:263)
at android.test.suitebuilder.TestSuiteBuilder.build(TestSuiteBuilder.java:185)
at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:336)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3982)
at android.app.ActivityThread.access$2900(ActivityThread.java:119)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1901)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4363)
at java.lang.reflect.Method.invokeNative(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NoClassDefFoundError: com.android.myproject.MyActivityClass
... 19 more

MyActivityClassextendsに変更するActivityと正常に動作しました(MyActivityClass extends Activity)テストとメイン プロジェクトの両方で
同じものを使用しましたandroid-support-v4.jar

4

6 に答える 6

7

解決策を見つけました

問題は

Caused by: java.lang.NoClassDefFoundError: com.android.myproject.MyActivityClass

両方のプロジェクトで同じjarを参照しても、クラスパスが見つかりません(両方のプロジェクトに別のjarを使用してみました)

今、同じプロジェクトでテスト環境を作成しましたが、うまく いきました

私の中でAndroidManifest.xml

<manifest...>
    <!-- For doing JUnit test, Instrumentation Start (remove later) -->
    <instrumentation
        android:targetPackage="com.pe.android.isccasinos"
        android:name="android.test.InstrumentationTestRunner" />
    <!-- For doing JUnit test, Instrumentation End (remove later) -->   
    <application ...>
    ................
    <!-- For doing JUnit test, add library starting (remove later) -->
        <uses-library
            android:name="android.test.runner" />
        <!-- For doing JUnit test, add library ending (remove later) -->
    </application>
<manifest>

次に、テスト用の特別なパッケージに Testing クラスを追加しました

extends ActivityInstrumentationTestCase2<fragmentActivity>

今、すべてが正常に動作しています:)

于 2011-06-28T05:28:30.323 に答える
7

ActivityInstrumentationTestCase2と互換性がありFragmentsます。Android Testing: E​​xternal librariesに記載されている手順のみに従う必要がありandroid-support-v4.jarます。

次に、次のようなテストを作成できます。

public void testFragmentManager() {
    FragmentActivity activity = getActivity();
    assertNotNull(activity.getSupportFragmentManager());
}

またはテストする必要があるもの。

于 2011-06-28T04:26:34.047 に答える
1

より良い答えについては、この質問を参照してください。

FragmentActivity は ActivityInstrumentationTestCase2 経由でテストできません

アプリから互換性ライブラリへの参照をエクスポートする必要があります。

于 2012-02-09T14:15:45.323 に答える
0

私の推測では、それActivityInstrumentationTestCase2はと互換性がありませんFragmentsRobolectricのようなものを試してみてください。

于 2011-06-27T18:04:27.527 に答える
0

私はこの問題に対処するためにほぼ1日を試み、別の投稿から解決策を見つけました

基本的に、アプリケーションで使用される android-support-v4.jar (私の場合) は、テスト アプリケーションで使用したものと同じである必要があります。最善の方法は、同じ jar をテスト プロジェクトの libs ディレクトリから削除し、同じものをアプリケーション プロジェクトからエクスポートすることです。そうすれば、この問題を確実に取り除くことができます。

于 2013-11-27T09:39:00.893 に答える