greenDAOサンプルアプリを例にJUnitでテストケースを書いてみたのですが、InvocationTargetExceptionによるRuntimeExceptionが発生してしまいました。
テストも実行しません。
以下は、これを禁止しているコードです。
import de.greenrobot.dao.test.*;
public class LibrarySummaryTest extends AbstractDaoTestLongPk<LibrarySummaryDao, LibrarySummary> {
public LibrarySummaryTest() {
super(LibrarySummaryDao.class);
}
@Override
protected LibrarySummary createEntity(Long arg0) {
// TODO Auto-generated method stub
return null;
}
}
足りないものはありますか?
私は Android アプリを持っています。テストは別のアプリにあります。コードを生成したときにこれを示しました:
schema.setDefaultJavaPackageTest("com.ralphpina.greenDao.test");
schema.setDefaultJavaPackageDao("com.ralphpina.greenDao.greendao");
アプリを正しくターゲットとするインストルメンテーションがあります。完全に正常に動作するJUnitテストケースがたくさんあります。
両方のアプリに greenDAO.jar を含め、それがビルド パスにあることを再確認しました。
Eclipse 環境に notes サンプル アプリがあり、そこで JUnit テストが正常に実行されます。したがって、私のプロジェクトには特定の何かが必要です。助言がありますか?
完全な例外のテキスト:
03-15 01:02:22.794: I/TestRunner(8775): java.lang.RuntimeException: Exception during suite construction
03-15 01:02:22.794: I/TestRunner(8775): at android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests.testSuiteConstructionFailed(TestSuiteBuilder.java:238)
03-15 01:02:22.794: I/TestRunner(8775): at java.lang.reflect.Method.invokeNative(Native Method)
03-15 01:02:22.794: I/TestRunner(8775): at java.lang.reflect.Method.invoke(Method.java:511)
03-15 01:02:22.794: I/TestRunner(8775): at junit.framework.TestCase.runTest(TestCase.java:168)
03-15 01:02:22.794: I/TestRunner(8775): at junit.framework.TestCase.runBare(TestCase.java:134)
03-15 01:02:22.794: I/TestRunner(8775): at junit.framework.TestResult$1.protect(TestResult.java:115)
03-15 01:02:22.794: I/TestRunner(8775): at junit.framework.TestResult.runProtected(TestResult.java:133)
03-15 01:02:22.794: I/TestRunner(8775): at junit.framework.TestResult.run(TestResult.java:118)
03-15 01:02:22.794: I/TestRunner(8775): at junit.framework.TestCase.run(TestCase.java:124)
03-15 01:02:22.794: I/TestRunner(8775): at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
03-15 01:02:22.794: I/TestRunner(8775): at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
03-15 01:02:22.794: I/TestRunner(8775): at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
03-15 01:02:22.794: I/TestRunner(8775): at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1661)
03-15 01:02:22.794: I/TestRunner(8775): Caused by: java.lang.reflect.InvocationTargetException
03-15 01:02:22.794: I/TestRunner(8775): at java.lang.reflect.Constructor.constructNative(Native Method)
03-15 01:02:22.794: I/TestRunner(8775): at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
03-15 01:02:22.794: I/TestRunner(8775): at android.test.suitebuilder.TestMethod.instantiateTest(TestMethod.java:87)
03-15 01:02:22.794: I/TestRunner(8775): at android.test.suitebuilder.TestMethod.createTest(TestMethod.java:73)
03-15 01:02:22.794: I/TestRunner(8775): at android.test.suitebuilder.TestSuiteBuilder.addTest(TestSuiteBuilder.java:262)
03-15 01:02:22.794: I/TestRunner(8775): at android.test.suitebuilder.TestSuiteBuilder.build(TestSuiteBuilder.java:184)
03-15 01:02:22.794: I/TestRunner(8775): at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:379)
03-15 01:02:22.794: I/TestRunner(8775): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4382)
03-15 01:02:22.794: I/TestRunner(8775): at android.app.ActivityThread.access$1300(ActivityThread.java:141)
03-15 01:02:22.794: I/TestRunner(8775): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1294)
03-15 01:02:22.794: I/TestRunner(8775): at android.os.Handler.dispatchMessage(Handler.java:99)
03-15 01:02:22.794: I/TestRunner(8775): at android.os.Looper.loop(Looper.java:137)
03-15 01:02:22.794: I/TestRunner(8775): at android.app.ActivityThread.main(ActivityThread.java:5039)
03-15 01:02:22.794: I/TestRunner(8775): at java.lang.reflect.Method.invokeNative(Native Method)
03-15 01:02:22.794: I/TestRunner(8775): at java.lang.reflect.Method.invoke(Method.java:511)
03-15 01:02:22.794: I/TestRunner(8775): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-15 01:02:22.794: I/TestRunner(8775): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-15 01:02:22.794: I/TestRunner(8775): at dalvik.system.NativeStart.main(Native Method)
03-15 01:02:22.794: I/TestRunner(8775): Caused by: java.lang.NoClassDefFoundError: com.outridersw.tapinspectandroid.greendao.DaoMaster
03-15 01:02:22.794: I/TestRunner(8775): at com.outridersw.tapinspectandroid.test.LibrarySummaryTest.<init>(LibrarySummaryTest.java:13)
03-15 01:02:22.794: I/TestRunner(8775): ... 18 more
アップデート:
greenDAO で生成されたクラスをテスト プロジェクトにコピー アンド ペーストすることで、JUnit を実行できました。明らかに、これは理想的ではありません。更新することを覚えておく必要があるからです。JUnit が greenDAO クラスを見つけられないのに、ターゲットの Android プロジェクトで他のすべてのクラスを問題なく表示できる理由はありますか?