Ios 如何为单元测试创建假领域结果

Ios 如何为单元测试创建假领域结果,ios,swift,xcode,realm,Ios,Swift,Xcode,Realm,也许是复制品;被接受的答案没有回答我的问题: 当单元测试我的视图控制器时,我想在我的模拟对象上返回一个假的领域“Results”对象。() 是否可以创建一个由我的测试数据组成的领域结果对象,而无需创建内存中的领域数据库,向其中添加所需的数据,然后查询对象 模拟对象: class MockRealmRepository: RealmRepository { override init() {} var getAccountRolesCallCount = 0 var

也许是复制品;被接受的答案没有回答我的问题:

当单元测试我的视图控制器时,我想在我的模拟对象上返回一个假的领域“Results”对象。()

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

模拟对象:

class MockRealmRepository: RealmRepository {

    override init() {}

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


    override func getAccountRoles() -> Results<AccountRole> {
        getAccountRolesCallCount += 1
        return getAccountRolesReturnValue
    }
}
类MockRealmRepository:RealmRepository{
重写init(){}
var getAccountRolesCallCount=0
var getAccountRoleSeturnValue:结果!
重写func getAccountRoles()->结果{
getAccountRolesCallCount+=1
返回getAccountRolesReturnValue
}
}
模拟的单元测试实现:

    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

        }
    }
class CreateProfileViewControllerTests:xTestCase{
私有变量mockRealmRepository:mockRealmRepository!
覆盖函数设置(){
super.setUp()
mockRealmRepository=mockRealmRepository()
}
func testCheckUsersRole_Valid(){
let admin=AccountRole(角色:“admin”)
let user=AccountRole(角色:“用户”)
let guest=AccountRole(角色:“guest”)
//创建包含上述AccountRole对象的Results()
mockRealmRepository.GetAccountRoleSeturnValue=//在此处分配我的结果对象
}
}

我可能会为测试创建一个InMemory域,并将其注入到您的测试中

基本上你会:

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

  • 这是因为如果不先将结果对象存储在InMemory数据库中并获取它们,就无法创建结果对象吗?我不确定这是否是不可能的,但这里的答案()确实表明这是不可能的。我只是认为这是最好的方法,因为它可以让你通过领域集成对你的系统进行准确的测试,你不必担心模仿所有的功能或结果。可能不是唯一的方法,但它简单、干净、快速。很抱歉,现在您特别询问在没有内存数据库的情况下执行此操作的可能性。我猜我的答案并不能真正回答你想要的。