首页 > 解决方案 > 如何为单元测试创​​建假 Realm 结果

问题描述

但是,可能是重复的;接受的答案没有回答我的问题: How to fake Realm Results for tests

在对我的视图控制器进行单元测试时,我想在我的模拟对象上返回一个假的 Realm 'Results' 对象。(类似于如何在 C# 中使用 Moq 完成

是否可以创建由我的测试数据组成的领域结果对象,而无需创建内存领域数据库,将所需数据添加到其中然后查询对象?

模拟对象:

class MockRealmRepository: RealmRepository {

    override init() {}

    var getAccountRolesCallCount = 0
    var getAccountRolesReturnValue: Results<AccountRole>!


    override func getAccountRoles() -> Results<AccountRole> {
        getAccountRolesCallCount += 1
        return getAccountRolesReturnValue
    }
}

Mock的单元测试实现:

    class CreateProfileViewControllerTests: XCTestCase {

        private var mockRealmRepository: MockRealmRepository!

        override func setUp() {
            super.setUp()

            mockRealmRepository = MockRealmRepository()
        }

        func testCheckUsersRole_Valid() {

            let admin = AccountRole(role: "Admin")
            let user = AccountRole(role: "User")
            let guest = AccountRole(role: "Guest")

            // Create a Results<AccountRole>() containing the above AccountRole objects

            mockRealmRepository.getAccountRolesReturnValue = // Assign my Results<AccountRole> object here

        }
    }

标签: iosswiftxcoderealm

解决方案


我可能会创建一个用于测试的 InMemory 领域并将其注入到您的测试中。

基本上你会:

  1. 在内存中创建一个领域
  2. 将三个角色添加到内存领域
  3. 使用普通的realm.objects(AccountRole.self)

推荐阅读