LoginSignup
5
3

More than 5 years have passed since last update.

json を読み込んで ObjectMapper のクラスのテストを書く

Last updated at Posted at 2017-06-29

ObjectMapper は Swift の Json Parser の1つです。
Mappable を継承して Entity Object を作る事ができます。

import ObjectMapper

class User: Mappable {
    var id: Int = 0
    var familyName: String = ""
    var givenName: String = ""

    required init?(map: Map) { }

    func mapping(map: Map) {
        id <- map["id"]
        familyName <- map["family_name"]
        givenName <- map["given_name"]
    }
}

extension User {
    public var fullName: String {
        return familyName + " " + givenName
    }
}

このクラスのテストを書くときに、 User のデータを JSON ファイルから読み込んでテストができるようにしていきます。

JSON ファイルの準備

User.json というファイル名で JSON を作成します。

{
    "id": 1,
    "family_name": "苗字",
    "given_name": "名前"
}

JSON の読み込み方法

まず User.json のファイルを読み込みます。

let url = Bundle(for: type(of: self)).url(forResource: "User", withExtension: "json")!
let json = try? String(contentsOf: url)

そして、その json を Mapper で読み込む事ができます。

let mapper = Mapper<User>()
user = mapper.map(JSONString: json!)

実際のテストファイル

ここでは Quick + Nimble でテストを書いています。

用意した User を使い、テストを書いていきます。
イニシャライズは終わっているので、 User の挙動をテストするだけですね。

import Foundation
import Quick
import Nimble
import ObjectMapper

class UserSpec: QuickSpec {
    override func spec() {
        var user: User!
        let mapper = Mapper<User>()

        beforeEach {
            let url = Bundle(for: type(of: self)).url(forResource: "User", withExtension: "json")!
            let json = try? String(contentsOf: url)
            user = mapper.map(JSONString: json!)
        }

        describe("mapping") {
            it("JSON のパラメータがマッピング出来ていること") {
                expect(user.id).to(equal(1))
                expect(user.familyName).to(equal("苗字"))
                expect(user.givenName).to(equal("名前"))
            }
        }

        describe("fullName") {
            it("全角スペース区切りのフルネームを取得すること") {
                expect(user.fullName).to(equal("苗字 名前"))
            }
        }
    }
}

おわり

ObjectMapper を利用した Entity のテストが書けるようになりました。
ネストの深い Object でも JSON を用意すればいいので、テストが簡単にかけます :muscle:

Swift4 では Codable が出てくるので ObjectMapper が不要になりますね、 Swift4 が待ち遠しいです :relaxed:

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3