Mam aplikację na Androida, w której używam dziedziny do utrzymywania danych. Chcę teraz napisać test jednostkowy dla tej aplikacji, wykorzystując Realm.Testowanie królestwa pod kontrolą systemu Android
Nie chcę jednak, aby test jednostki zakłócał moje istniejące dane z dziedziny. Dlatego chcę wygenerować różne pliki Realm dla mojej instancji testowej. Nie obchodzi mnie, czy mają inną nazwę lub są przechowywane w innym katalogu.
Próbowałem użyć RenamingDelegatingContext
, ale bez powodzenia. Według https://groups.google.com/forum/#!msg/realm-java/WyHJHLOqK2c/WJFYvglIGk0JgetInstance()
używa tylko Context
do wywoływania getFilesDir()
, która nie wydaje się nadpisywać metody getFilesDir()
, więc w końcu wykorzystuję moje dane na żywo do testowania.
Następnie próbowałem użyć IsolatedContext
, ale IsolatedContext.getFilesDir()
zwraca null
, więc to też się nie udało.
Wreszcie, próbowałem napisać klasę rozszerzającą RenamingDelegatingContext
, nadpisując getFilesDir()
, zwracając inny katalog do wykorzystania w Królestwie. Stworzyłem katalog przy użyciu DeviceMonitor w AndroidStudio, ale kiedy próbuję użyć tego kontekstu, Realm nie działa z io.realm.exceptions.RealmIOException: Failed to open . Permission denied. open() failed: Permission denied
.
Czy ktoś wie, czy istnieje możliwość przetestowania dziedziny bez wpływu na bieżące dane?
Obecnie używam JUnit3, więc nie wydaje mi się to przydatne. Rozwiązałem swój problem, używając innego pliku bazy danych z ConfigurationBuilder, ale będę mieć na uwadze twoje rozwiązanie, ponieważ wygląda na to, że jest trochę lepsze, ponieważ usuwa również pliki tymczasowe po przetestowaniu. –
@Christian Wypróbowałem powyższy kod za pomocą Junit4 po wyjątek getInstance(): java.lang.UnsatisfiedLinkError: brak sfera-jni w java.library.path \t w java.lang.ClassLoader.loadLibrary (ClassLoader.java:1865) \t w java.lang.Runtime. loadLibrary0 (Runtime.java:870) \t na java.lang.System.loadLibrary (System.java:1122) \t na io.realm.internal.RealmCore.loadLibrary (RealmCore.java:117) – GaneshP
Obecnie Realm nie obsługuje testowanie maszyny JVM, należy uruchomić testy na urządzeniu. –