Unit Tes menulis di Swift untuk menguji tugas yang tidak sinkron

Hari ini saya ingin cepat memberi tahu Anda cara menguji kode asinkron.

Bayangkan situasi yang Anda butuhkan untuk mengunduh data dari Internet dan memeriksa apakah semuanya berfungsi dengan baik, atau tugas lain yang berjalan secara tidak sinkron. Dan bagaimana cara mengujinya? Bagaimana jika Anda mencoba yang sama dengan kode sinkron biasa ?!

func testAscynFunction() { someAsyncFunction() } func someAsyncFunction() { let bg = DispatchQueue.global(qos: .background) bg.asyncAfter(deadline: .now() + 5) { XCTAssert(false, "Something went wrong") } } 

Tes semacam itu akan mengembalikan hasil positif kepada kami, karena metode ini tidak akan menunggu semua tugas asinkron kami.

Untuk memecahkan masalah seperti itu dalam tes, ada satu hal hebat: Ekspektasi XCTest
XCTestExpectation menetapkan berapa kali metode asinkron harus dieksekusi, dan hanya setelah semua eksekusi ini tes akan berakhir dan memberi tahu apakah ada kesalahan. Berikut ini sebuah contoh:

 class TestAsyncTests: XCTestCase { // 1)  expectation var expectation: XCTestExpectation! func testWithExpectationExample() { //2)   expectation = expectation(description: "Testing Async") //3)    ,     expectation.fulfill() expectation.expectedFulfillmentCount = 5 for index in 0...5 { someAsyncFunctionWithExpectation(at: index) } //5)      expectation.fulfill() //       60     ,     waitForExpectations(timeout: 60) { (error) in if let error = error { XCTFail("WaitForExpectationsWithTimeout errored: \(error)") } } } func someAsyncFunctionWithExpectation(at index: Int) { let bg = DispatchQueue.global(qos: .background) bg.asyncAfter(deadline: .now() + 5) { [weak self ] in XCTAssert(false, "Something went wrong at index \(index)") //4)      expectation.expectedFulfillmentCount self?.expectation.fulfill() } } } 

Saya harap posting ini bermanfaat bagi seseorang.

Source: https://habr.com/ru/post/id439772/


All Articles