Xcode
iOS
XCTest
Swift
swift4

ようやくGUI! SwiftでUIKitのLabel部品でおみくじ(1つ前の履歴を表示 - 関数分割2-テスタブルコード)


はじめに

おみくじをひくアプリについて「1つ前の履歴を表示」関数は

今回の処理の中で最も複雑だが、副効果を期待する「非テスタブルコード」だった。

本投稿では、UnitTestをしやすい関数へ分割する。


元コード

func displayHistory() {

let historyList = cl.getHistory()

//1つ前の履歴の「インデックス」を算出
let prevIdx = historyList.count - 2

if 0 <= prevIdx
{
//インデックスが有効範囲なら、履歴を表示
history.text = historyList[prevIdx]
}
}

難しい処理ではないが、入力と出力がなく

XCTestを使ってのテストはやりにくい。


分割

元関数のI/Fはそのまま、中身の処理を入出力ありの関数へ分割する。

func displayHistory() {

//1つ前の履歴をUIへ設定
history.text = getHistoryStr(historyList: cl.getHistory() )
}

新規関数は、文字配列を受け取り文字列を返す。

該当情報無しの場合は空文字列を返す。

今回は空文字設定によるパフォーマンスへの影響は無視する。(極小アプリだし。。。)

func getHistoryStr(historyList: [String]) -> String {

//1つ前の履歴の「インデックス」を算出
let prevIdx = historyList.count - 2

//「1つ前」が範囲内なら履歴の内容を返す。範囲外なら空文字を返す
return (0 <= prevIdx) ? historyList[prevIdx] : ""
}


結果

XCTestにかけられる関数に分割できた。