我有一个类从ServiceTestCase
延伸到测试我的Android服务实现。静态最终常量变为空
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
为空。这是发生这种情况的方法:
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
为空
我不修改显然未能这种不断的任何地方(无论如何,因为这是最后我不能修改的话),所以我不不理解这种行为。
如果我将这个常量移动到另一个类/接口,它工作正常。
任何人都可以请解释这种行为?提前致谢!
'wipeOutDB()'会失败,并'NullPointerException'文件构造函数中。也许你有[static static dependency](http://stackoverflow.com/questions/6416408/static-circular-dependency-in-java)导致[在静态初始化程序中出现意外的异常](http:// docs .oracle.com/javase/6/docs/api/java/lang/ExceptionInInitializerError.html) – zapl
是的,它确实与NPE失败,但为什么只在第二次测试?没有意义... – m0skit0