2012-11-23 11 views
5

私はAndroidサービスの実装をテストするためにServiceTestCaseから拡張されたクラスを持っています。静的最終定数がnullになる

public class MainCoreServiceTest extends ServiceTestCase<CoreService> { 

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

    // More code 
} 

私が直面しています問題は、私は唯一のテストメソッドを実行した場合、すべてが正常であるということですが、私は第二の試験方法に、その後(いくつかのテストメソッドが含まれている)クラス全体を起動する場合、私はExceptionInInitializerErrorを取得し、これは、DB_PATHがnullであるためです。これは、この問題が発生したメソッドです:DB_PATH

私は変更しないでくださいnullのとき

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)は明らかに失敗し、この一定のどこか(それが最終だから、とにかく、私はそれを変更することはできません)、Iドンので、この行動を理解していない。

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

誰でもこの現象を説明できますか?前もって感謝します!

+0

'wipeOutDB()'ファイルのコンストラクタの内部 'NullPointerException'で失敗します。たぶん、[静的初期化子で予期しない例外が発生する](http:// docs(英語))につながる[循環静的依存関係](http://stackoverflow.com/questions/6416408/static-circular-dependency-in-java) .oracle.com/javase/6/docs/api/java/lang/ExceptionInInitializerError.html) – zapl

+0

はい、NPEで失敗しますが、なぜ2回目のテストでのみ失敗しますか? – m0skit0

答えて

2

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

も参照してください:http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ExceptionInInitializerError.html

+0

CoreService.class.getPackage()。getName()には何がありますか? AFAIKこれは完全に静的な情報です。それは最初のテストで動作します... – m0skit0

関連する問題