You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSV格式文件输出单元测试XCTAssertEqual失败求助

解决CSV单元测试XCTAssertEqual不匹配问题

针对你遇到的CSV行生成与预期字符串不匹配导致测试失败的问题,给出以下具体解决建议:

1. 排查隐形字符与换行差异

  • 替换print为debugPrint,打印两个字符串的完整字符细节(包括换行、特殊空格、转义符等):
    debugPrint("Generated: \(sut.csvData)")
    debugPrint("Expected: \(wdOutput)")
    
    重点检查生成的字符串是否末尾多了\n换行符,或者存在预期中没有的隐形字符。
  • 确认createTotalRow方法是否自动在每行末尾添加了换行符,如果是,需要在wdOutput末尾补充\n,或者修改生成逻辑去掉多余换行。

2. 绕过字符串格式,对比CSV内容本质

直接对比字符串容易受引号、空格等格式细节影响,建议把CSV行解析成字段数组后再对比,忽略格式差异:

// 辅助方法:将CSV行转成字段数组(自动去除首尾引号)
func csvRowToFields(_ row: String) -> [String] {
    return row.components(separatedBy: ",").map {
        $0.trimmingCharacters(in: CharacterSet(charactersIn: "\""))
    }
}

// 替换原XCTAssertEqual为数组对比
let expectedFields = csvRowToFields(wdOutput)
let actualFields = csvRowToFields(sut.csvData)
XCTAssertEqual(actualFields, expectedFields)

3. 简化测试逻辑,定位问题点

当前测试通过循环拼接sut.csvData,可能引入额外的拼接错误。先单独测试单一行的生成逻辑:

// 直接测试createTotalRow的输出,跳过csvData拼接
let generatedRow = sut.createTotalRow(item: 0, wdCode: wdCode)
XCTAssertEqual(generatedRow, wdOutput)

确认单一行生成正确后,再测试多行拼接逻辑。

4. 检查特殊字符一致性

注意你预期字符串中的10:30 AM包含窄空格(U+202F),而非普通空格(U+0020)。如果日期格式化逻辑生成的是普通空格,会导致字符串不匹配:

  • 把预期中的窄空格替换为普通空格,或者修改日期格式化代码,确保生成的空格类型一致。

内容的提问来源于stack exchange,提问作者Galen Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 05:53:22