Ho una classe che si estende da ServiceTestCase
per testare l'implementazione del servizio Android.La costante statica finale diventa nulla
public class MainCoreServiceTest extends ServiceTestCase<CoreService> {
protected static final String DB_PATH = "/data/data/"
+ CoreService.class.getPackage().getName() + "/databases/"
+ DatabaseManager.DB_NAME;
// More code
}
Il problema che sto affrontando è che se corro solo un metodo di prova, tutto va bene, ma se mi lancio a tutta la classe (che contiene diversi metodi di prova) e poi sul secondo metodo di prova ottengo un ExceptionInInitializerError
e Ho scoperto che questo è dovuto al fatto che DB_PATH
è nullo. Questo è il metodo in cui questo avviene:
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)
fallisce ovviamente quando DB_PATH
è nullo
Non modificare questo costante ovunque (comunque non modificabili perché è finale), così don capisco questo comportamento
Se sposto questa costante su un'altra classe/interfaccia, funziona correttamente.
Qualcuno può spiegare questo comportamento? Grazie in anticipo!
'wipeOutDB()' sarebbe riuscire con un 'NullPointerException' all'interno del costruttore di file. Forse hai qualche [dipendenza statica circolare] (http://stackoverflow.com/questions/6416408/static-circular-dependency-in-java) che porta a [un'eccezione imprevista in un inizializzatore statico] (http: // docs .oracle.com/javase/6/docs/api/java/lang/ExceptionInInitializerError.html) – zapl
Sì, fallisce con un NPE, ma perché solo su un secondo test? Non ha senso ... – m0skit0