0
ユニットテスト非同期操作の従来の方法は何ですか?CloudKitクエリが完了するのを待つ単体テストを書く従来の方法はありますか?
背景:
私のアプリは、それがCloudKitに呼び出しを行い、結果をその内部のデータソース更新初期化される:私が書いたX-コードのユニットテスト機能を使用
import Foundation
import CloudKit
class CountdownItemModel {
// MARK: - Properties
var countdownItems: [CountdownItem] = []
static let sharedInstance = CountdownItemModel()
let container: CKContainer
let database: CKDatabase
// MARK: - Initializers
init() {
container = CKContainer.default()
database = container.privateCloudDatabase
getAllCountdownItems()
}
// MARK - CloudKit Methods
func getAllCountdownItems() {
let query = CKQuery(recordType: "CountdownItem", predicate: NSPredicate(value: true))
database.perform(query, inZoneWith: nil) {
(results, error) in
if (error != nil) {
print("[ERROR] Error in getAllCountdownItems\n", error!)
}
else {
self.countdownItems.removeAll(keepingCapacity: true)
if let records = results {
for record in records {
let countdownItem = CountdownItem(record: record)
self.countdownItems.append(countdownItem)
}
}
}
}
}
}
をiCloudからのデータが到着したことを確認するためのテストですが、このテストはクエリが返される前に実行されるため失敗します。
import XCTest
@testable import countdown
class countdownTests: XCTestCase {
let model = CountdownItemModel.sharedInstance
override func setUp() {
super.setUp()
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func testItemsCountGreatThanZero() {
sleep(10) // <- DIRTY FIX/WORKAROUND
XCTAssert(model.countdownItems.count > 0)
}
}
あなたが見ることができるように、私がテストに睡眠を挿入することによって、この問題を回避働いてきたが、このストライキは厄介なビットとしても、パフォーマンステストではなく、ユニットテストの領域にveers。
一般に認められているアプローチはありますか?
優秀、ありがとうございます! – mazz0