我按照Realm网站上的指南进行操作,但我的测试仍然会产生不同的结果,具体取决于它们的随机顺序.
它们在单独运行时成功,或者因为数据已经设置而失败.例如:
XCTAssert(observer.events[0].value.element == "", "Initail hub name is expected to be equal to be an empty string but was \(String(describing: observer.events[0].value.element))")
XCTAssert(observer.events[1].value.element == testHubName, "Initail hub name is expected to be equal to be the name we set but was \(String(describing: observer.events[1].value.element))")
Run Code Online (Sandbox Code Playgroud)
在此示例中,event[0]已设置为testHubName.或者它得到一个@throw RLMException(@"Object has been deleted or invalidated.");
所以我猜有一些种类的竞争,但这是在我的setup方法:
func setupRealm() {
testRealm = try! Realm(configuration: Realm.Configuration(inMemoryIdentifier: "DORSessionViewModelTestsRealm"))
try! self.testRealm.write {
self.testRealm.deleteAll()
}
}
Run Code Online (Sandbox Code Playgroud)
所以据我所知,每次测试都应该有一个新的Realm,那么比赛在哪里进行?
编辑:添加课程的更大部分
class DORSessionViewModelTests: XCTestCase {
var disposeBag: DisposeBag = DisposeBag()
var scheduler = TestScheduler(initialClock: 0)
var testRealm: Realm!
override func setUp() {
super.setUp()
setupRealm()
setupRx()
}
override func tearDown() {
super.tearDown()
}
func testHubNameLabelTextUpdate() {
let expectation = self.expectation(description: "expect hub name text to update")
let testHubName = "testHubName"
let viewModel = getSessionViewModel()
let observer = scheduler.createObserver(String.self)
scheduler.start()
let hubNameDriver = viewModel.hubNameLabelText()
hubNameDriver.asObservable().subscribe(observer).disposed(by: disposeBag)
hubNameDriver.asObservable().skip(1).subscribeNext { _ in expectation.fulfill()}.disposed(by: disposeBag)
try! self.testRealm.write {
viewModel.dependencies..hub.name = testHubName
}
waitForExpectations(timeout: 5, handler: { error in
XCTAssert(observer.events[0].value.element == "", "Initail hub name is expected to be equal to be an empty string but was \(String(describing: observer.events[0].value.element))")
XCTAssert(observer.events[1].value.element == testHubName, "Initail hub name is expected to be equal to be the name we set but was \(String(describing: observer.events[1].value.element))")
})
}
func setupRx() {
disposeBag = DisposeBag()
scheduler = TestScheduler(initialClock: 0)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2062 次 |
| 最近记录: |