首页 > 解决方案 > 泛型类型“结果”专用于类型参数太少(得到 1,但预期为 2)- swift 单元测试中的错误

问题描述

我已经为 JSON 编码编写了一个测试用例,但出现以下错误

泛型类型“结果”专用于太少的类型参数(得到 1,但预期为 2)

我是编写测试的新手,任何形式的帮助都将不胜感激。下面是代码片段。

  func test_encodeDecodeToFile_happy() {
    let testData = TestData(name: "test", number: 42)
    let url = urlForFile(name: writableFile1)
    let encoded = JsonFileCoder.EncodeToFile(encoded: testData, url: url)
    XCTAssertTrue(encoded)
    let result: Result<TestData> = JsonFileCoder.DecodeFile(url: url)

    switch result {
    case .Success(let decoded):
        XCTAssert(decoded.name == testData.name)
        XCTAssert(decoded.number == testData.number)
    case .Failure(let err):
        XCTFail((err?.localizedDescription)!)
    }
}

JsonFileCoder.swift

  static func EncodeToFile<T: Encodable>(encoded: T, url: URL) -> Bool {
    if let data = Encode(encoded: encoded) {
        do {
            try data.write(to: url)
            return true
        } catch {
            print("Could not encode \(error.localizedDescription)")
            return false
        }
    }
    return false
}

 static func Encode<T: Encodable>(encoded: T) -> Data? {
    if let data = try? JSONEncoder().encode(encoded) {
        return data
    }
    return nil
}
 static func DecodeFile<T: Decodable>(url: URL) -> CurveResult<T> {
    if let data = try? Data(contentsOf: url, options: .mappedIfSafe) {
        return Decode(data: data)
    }

    print("Could not decode \(url.absoluteString)")
    return CurveResult.Failure(JsonFileError.couldNotDecode)
}

static func Decode<T: Decodable>(data: Data) -> CurveResult<T> {
    if let decoded = try? JSONDecoder().decode(T.self, from: data) {
        return CurveResult.Success(decoded)
    }

    return CurveResult.Failure(JsonFileError.couldNotDecode)
}

标签: iosswiftxcodeunit-testing

解决方案


推荐阅读