Ios 如何为单元测试创建假领域结果
也许是复制品;被接受的答案没有回答我的问题: 当单元测试我的视图控制器时,我想在我的模拟对象上返回一个假的领域“Results”对象。() 是否可以创建一个由我的测试数据组成的领域结果对象,而无需创建内存中的领域数据库,向其中添加所需的数据,然后查询对象 模拟对象:Ios 如何为单元测试创建假领域结果,ios,swift,xcode,realm,Ios,Swift,Xcode,Realm,也许是复制品;被接受的答案没有回答我的问题: 当单元测试我的视图控制器时,我想在我的模拟对象上返回一个假的领域“Results”对象。() 是否可以创建一个由我的测试数据组成的领域结果对象,而无需创建内存中的领域数据库,向其中添加所需的数据,然后查询对象 模拟对象: class MockRealmRepository: RealmRepository { override init() {} var getAccountRolesCallCount = 0 var
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数据库中并获取它们,就无法创建结果对象吗?我不确定这是否是不可能的,但这里的答案()确实表明这是不可能的。我只是认为这是最好的方法,因为它可以让你通过领域集成对你的系统进行准确的测试,你不必担心模仿所有的功能或结果。可能不是唯一的方法,但它简单、干净、快速。很抱歉,现在您特别询问在没有内存数据库的情况下执行此操作的可能性。我猜我的答案并不能真正回答你想要的。