iOS
Swift
ユニットテスト

Swiftでのプライベートプロパティのテスト方法

問題

Swiftでコードを書く場合、Viewのテストで内部のプロパティが正常に設定されているかどうか検証したいが、そのためにプロパティを公開したくない。

解決策

JSON文字列でエクスポートするメソッドを定義して、テストクラス側でJSONに組み立てて検証する。

コード例

JSONパーサーはSwiftyJSONを使っています。

プロダクトコード側
class TableViewCell: UITableViewCell {

    override var debugDescription: String {
        return JSON(["title" : titleLabel.text ?? "", "subtitle" : subTitleLabel.text ?? ""]).debugDescription
    }

}

テストコード側でJSONに組み立てて検証します。

テストコード側
   func test_properties() {

        XCTAssertEqual(JSON(parseJSON:tableViewCell.debugDescription), JSON(["title": "ssss", "subtitle" : ""]))
    }

課題

・チーム開発で、各人のレベル差、意識差まちまちの場合、意図を汲み取れずアクセさーメソッドのような意図しない使われ方をする?
・プロパティ名等をリファクタリングする場合、ビルド時ではなく、テスト実施時にエラーが見つかるため、やや脆いテストになる。