iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
Mobile Development

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

D7 - 在 iOS 專案加上測試-You need testing {從後端回來的 json 開始寫測試 part 3}

  • 分享至 

  • xImage
  •  

前一天我們測了 array 的數量,測試的 json 轉成 User (事實上是 [UserElement]),並確定 array 的 count 數是 3 個。但我們並沒有真正的測到每個物件。
依照前面幾天的案例 feature 擴充
如果進行需求變更,而改動 Decodable Model 的 property,在這個狀況下,目前的測試案例,是保護不了的。

所以,我們繼續補測試,在 UserElementTests 再加一個測試.

Step1:再加上一個測試 func testFirstUser()

func testFirstUser() throws {
        
        let data = getRawData()
        let users = try JSONDecoder().decode(User.self, from: data)
        /// 在這邊取出第 0 個 element
        let firstUser = users.first
        /// firstUser 是 optional 的,這時可以用 XCTUnwrap 將 optional 轉出,因為我們確定有值且要拿第 0 個來測
        let model = try XCTUnwrap(firstUser)
    }

Step2:開始測試 model

在取得 model 的下方,就可以開始用 XCTAssertEqual 開始測 model,第一個要測的是 id,但請記得,第一次跑測試的時候,要讓 test failed,所以我們先讓 XCTAssertEqual 的第二個參數為 0,讓測試 failed。

https://ithelp.ithome.com.tw/upload/images/20230917/20140622jM88JIu9W9.png

Step3:讓測試通過

https://ithelp.ithome.com.tw/upload/images/20230917/20140622dc9Knj6vQn.png

Step4:把該測的參數都測一遍

這邊用 id, name, username, email, phone, website 為例子,address 與 company 就不寫了。讀者可以自行去測 address 部分和 company 部分

func testFirstUser() throws {
        
        let data = getRawData()
        let users = try JSONDecoder().decode(User.self, from: data)
        /// 在這邊取出第 0 個 element
        let firstUser = users.first
        /// firstUser 是 optional 的,這時可以用 XCTUnwrap 將 optional 轉出,因為我們確定有值且要拿第 0 個來測
        let model = try XCTUnwrap(firstUser)
        
        XCTAssertEqual(model.id, 1)
        XCTAssertEqual(model.name, "Leanne Graham")
        XCTAssertEqual(model.username, "Bret")
        XCTAssertEqual(model.email, "Sincere@april.biz")
        XCTAssertEqual(model.phone, "1-770-736-8031 x56442")
        XCTAssertEqual(model.website, "hildegard.org")
    }

未來,在這些 property 有變化的時候,我們也可以保證這些測試能發揮作用,幫你擋下會閃退的狀況。以筆者的親身經歷而言,真的遇過物件的宣告從 Int 變成 String,或是從 String 變成 Int 的狀況。在沒寫測試的情形下,當然也是可以進行更改,但在還發佈到 App Store 的時候,總是能被使用者發現沒改到的地方,然後就反應給客服了。這時候,負責的工程師 (就是筆者),即使是假日,也要把電腦打開,更改後進行發版和送審。

所以,你的專案真的需要測試嗎? Yes. You need testing! (如果你不想常常加班的話)


上一篇
D6 - 在 iOS 專案加上測試-You need testing {從後端回來的 json 開始寫測試 part 2}
下一篇
D8 - 在 iOS 專案加上測試-You need testing {維持良好的習慣方法-先寫測試}
系列文
在 iOS 專案上加上 Unit testing - 因為 You need testing32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言