2015-12-11 16 views
7

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?

Odpowiedz

8

byłem całkiem ślepa, ze rozwiązanie jest dość proste tylko przy użyciu innej nazwy dla RealmDatabase podczas konfigurowania testu podczas generowania jego konfiguracji. Moje rozwiązanie wygląda teraz następująco:

RealmConfiguration config = new RealmConfiguration.Builder(getContext()). 
     schemaVersion(1). 
     migration(new CustomMigration()). 
     name("test.realm"). 
     inMemory(). 
     build(); 
Realm.setDefaultConfiguration(config); 
7

Jeśli używasz JUnit4 można użyć reguły TemporaryFolder wygenerować folder testowy: https://garygregory.wordpress.com/2010/01/20/junit-tip-use-rules-to-manage-temporary-files-and-folders/

@Rule 
public TemporaryFolder testFolder = new TemporaryFolder(); 

@Test 
public void testRealm() throws IOException { 
    File tempFolder = testFolder.newFolder("realmdata"); 
    RealmConfiguration config = new RealmConfiguration.Builder(tempFolder).build(); 

    Realm realm = Realm.getInstance(config); 
    // Do test 
    realm.close(); // Important 
} 
+0

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. –

+1

@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

+1

Obecnie Realm nie obsługuje testowanie maszyny JVM, należy uruchomić testy na urządzeniu. –

Powiązane problemy