Mam klasę, która rozciąga się od ServiceTestCase
, aby przetestować moją implementację usługi Android.Stała końcowa stała się pusta
public class MainCoreServiceTest extends ServiceTestCase<CoreService> {
protected static final String DB_PATH = "/data/data/"
+ CoreService.class.getPackage().getName() + "/databases/"
+ DatabaseManager.DB_NAME;
// More code
}
Problem jestem stoi to, że jeśli mogę uruchomić tylko jedną metodę badania, wszystko jest w porządku, ale jeśli uruchomić całą klasę (który zawiera kilka metod badawczych), a następnie na drugiej metodzie testowej Dostaję ExceptionInInitializerError
i Dowiedziałem się, że to dlatego, że DB_PATH
ma wartość null. Jest to metoda, w której to się dzieje:
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)
oczywiście nie powiedzie się, gdy DB_PATH
jest null
nie modyfikować tę stałą wszędzie (w każdym razie nie mogę go zmodyfikować, ponieważ jest to wersja ostateczna), więc don nie rozumiem tego zachowania.
Po przeniesieniu tej stałej do innej klasy/interfejsu działa dobrze.
Czy ktoś może wyjaśnić to zachowanie? Z góry dziękuję!
'wipeOutDB()' nie powiedzie się z 'NullPointerException' wewnątrz konstruktora pliku. Być może masz pewną [kołową zależność statyczną] (http://stackoverflow.com/questions/6416408/static-circular-dependency-in-java), która prowadzi do [nieoczekiwanego wyjątku w statycznym inicjalizatorze] (http: // docs .oracle.com/javase/6/docs/api/java/lang/ExceptionInInitializerError.html) – zapl
Tak, to kończy się niepowodzeniem z NPE, ale dlaczego tylko na drugim teście? Nie ma sensu ... – m0skit0