2016-08-11 9 views
5

のための偽のレルム結果に私が検証するためのテストを書かれている:どのようにテスト

func test_getTaskLists_doNotCreateOrUpdateTaskListToStorageWhenSynchedLocally() { 

    ...  
    let (datasource, restAPI, fakeTaskListStorage) = ... 

    datasource.getTaskLists() { (taskLists, error) -> Void in 
     ... 
     XCTAssertEqual(1, fakeTaskListStorage.readAllInvocationCount) 
     ...  
    } 
... 
    } 

機能は、スーパー実装を回避するために嘲笑されており、問題は、関数が結果を返すことであるI有効なオブジェクトを返すためにビルド/モックを見つけることができないので、コンパイラは不平を言います...私はsuper.readAll()を呼び出すことができますが、ここでは実際にテストデータ(fakeTaskLists)を偽の結果オブジェクトは誰でも幸せです...可能かどうかわからない

class FakeTaskListsStorageRealm : TaskListStorageRealm { 
    var fakeTaskLists:[TaskList]? 
    override func readAll() -> RealmSwift.Results<TaskList> { 
     readAllInvocationCount += 1 
     //Here I want to return fakeTaskLists somehow... 
    } 
} 

答えて

3

Resultsを直接インスタンス化する方法はありません。 Resultsのサブクラス化も許可されません。私は最良の方法はResultsを直接使用するのではなくResultsWrapperのようなプロトコルでResultsを隠していると思う。

しかし簡単な回避策は、テスト時にメモリ内の領域を使用することです。 FakeTaskListsStorageRealmさんreadAll()次のようにメモリ内のレルムを使用して書くことができます。

class FakeTaskListsStorageRealm : TaskListStorageRealm { 
    var fakeTaskLists:[TaskList]? 
    override func readAll() -> RealmSwift.Results<TaskList> { 
     readAllInvocationCount += 1 
     return try! Realm(configuration: Realm.Configuration(inMemoryIdentifier: "test")).objects(TaskList.self) 
    } 
} 
+0

私は同様のラッパーを持っており、このアプローチが動作していることを確認することができます - 私は、イン使用していないので、私は配列を持つラッパーの実装を持っていますメモリ領域。 – ReDetection

関連する問題