5

我有一个扩展自的类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当为空时显然失败

我不会在任何地方修改这个常量(无论如何我不能修改它,因为它是最终的),所以我不理解这种行为。

如果我将此常量移动到另一个类/接口,它工作正常。

谁能解释一下这种行为?提前致谢!

4

1 回答 1

2

您得到的异常意味着无法初始化 DB_PATH - 因此null稍后会出现。我猜你用来初始化 DB_PATH 的部分之一是空的,可能在这个:CoreService.class.getPackage().getName().

另请参阅:http ://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ExceptionInInitializerError.html

于 2012-11-23T14:53:24.670 回答