Модульное тестирование соответствия Decodable с использованием SingleValueDecodingContainer - PullRequest
0 голосов
/ 08 мая 2018

Итак, у меня есть тип, который выглядит так:

struct Identifier {
    let string: String
}

extension Identifier: Decodable {
    public init(from decoder: Decoder) throws {
        let container = try decoder.singleValueContainer()
        string = try container.decode(String.self)
    }
}

Смысл этого типа в том, что если у меня есть JSON, который выглядит следующим образом:

{
    "identifier": "abc123",
    // more properties ...
}

... он будет автоматически сериализован в нужный тип без особых усилий. Однако у меня возникают проблемы с модульным тестированием этого соответствия Decodable без создания типа упаковки.

Я хочу сделать что-то вроде этого:

func testDecodableInit() {
    let identifier = try! JSONDecoder().decode(Identifier.self, from: "1".data(using: .utf8)!)
    XCTAssertEqual(identifier.string, "1")
}

Но, очевидно, это не работает, потому что "1" не является допустимым JSON.

Можно ли написать модульный тест для этого соответствия в Decodable без создания типа переноса и изменения данных на допустимый JSON?

...