iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0
Mobile Development

在 iOS 專案上加上 Unit testing - 因為 You need testing系列 第 22

D22 - 在 iOS 專案加上測試-You need testing {handling errors}

  • 分享至 

  • xImage
  •  

上一篇的 URLSessionProtocolMock 沒有處理到錯誤,這一篇加上 error 的 testing。

step1: URLSessionProtocolMock 中加上 Error? property

/// URLSessionProtocolMock.swift
/// handle error
 var dataForDelegateError: Error?

step2: data(for:delegate) 的起始處,加上 error

func data(for request: URLRequest, delegate: URLSessionTaskDelegate?) async throws -> (Data, URLResponse) {
        
        /// handle error at start
        if let error = dataForDelegateError {
            throw error
        }
        
        dataForDelegateRequest = request
        
        guard let dataForDelegateReturnValue = dataForDelegateReturnValue else {
            fatalError()
        }
        
        return dataForDelegateReturnValue
    }

step3: 在 APIClientTests 寫下 Error 的測試

func testErrorHandleOnURLSessionProtocolMock() async throws {
        
        let urlSessionMock = URLSessionProtocolMock()
        let expect = NSError(domain: "", code: 1234)
        urlSessionMock.dataForDelegateError = expect
        sut.session = urlSessionMock
        do {
            _ = try await sut.getStockClosPriceList()
            XCTFail("this test should get error")
        } catch {
            let nsError = try XCTUnwrap(error as NSError)
            XCTAssertEqual(nsError, expect)
        }
    }

step4: 通過所有的測試
https://ithelp.ithome.com.tw/upload/images/20231003/2014062296wjr6eLqa.png


上一篇
D21 - 在 iOS 專案加上測試-You need testing {測試 async/await function}
下一篇
D23 - 在 iOS 專案加上測試-You need testing {handling JSON decode error}
系列文
在 iOS 專案上加上 Unit testing - 因為 You need testing32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言