5

ServiceTestCaseAndroidサービスの実装をテストするために拡張するクラスがあります。

public class MainCoreServiceTest extends ServiceTestCase<CoreService> {

    protected static final String DB_PATH = "/data/data/"
            + CoreService.class.getPackage().getName() + "/databases/"
            + DatabaseManager.DB_NAME;

    // More code
}

私が直面している問題は、1つのテストメソッドだけを実行すればすべてがうまくいくということですが、クラス全体(複数のテストメソッドを含む)を起動すると、2番目のテストメソッドでが取得ExceptionInInitializerErrorされ、これDB_PATHはヌル。これは、これが発生する方法です。

private void wipeOutDB() {

    // Erase DB file
    File dbFile = new File(DB_PATH);
    if (dbFile.exists()) {
        assertTrue(dbFile.delete());
    }

    // Erase journal file
    dbFile = new File(DB_PATH + "-journal");
    if (dbFile.exists()) {
        assertTrue(dbFile.delete());
    }
}

new File(DB_PATH)DB_PATHがnullの場合は明らかに失敗します

私はこの定数をどこにも変更しないので(とにかく最終的なものなので変更できません)、この動作を理解していません。

この定数を別のクラス/インターフェイスに移動すると、正常に機能します。

誰かがこの振る舞いを説明できますか?前もって感謝します!

4

1 に答える 1

2

取得した例外は、DB_PATH を初期化できなかったことを意味します。したがって、null後で説明します。DB_PATH を初期化するために使用する部分の 1 つが null であると思います。おそらく、この部分のどこかにCoreService.class.getPackage().getName().

参照: http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ExceptionInInitializerError.html

于 2012-11-23T14:53:24.670 に答える