Edited at

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

More than 1 year has passed since last update.

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: