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

Clojure测试中如何处理with-out-str输出末尾的换行符问题

解决方案

针对控制台输出末尾多余换行导致的测试不匹配问题,有两种更鲁棒的处理方案,优于直接硬编码拼接\newline:


方案1:修剪实际输出的末尾空白

如果业务逻辑不需要严格校验末尾换行的存在,可以仅修剪实际输出末尾的空白字符(换行、空格、制表符等),再与预期JSON对比。
使用Clojure标准库的clojure.string/trimr实现,不会修改字符串开头和中间的内容,兼容性更强:

(require '[clojure.string :as str])

(deftest create-account-test
  (testing "Create account"
    (is (= (cheshire/generate-string {:account {:active-card true :available-limit 100} :violations []})
           ;; 仅修剪输出末尾的空白字符
           (str/trimr (with-out-str
                        (io/-main "test/sample-input.txt")))))))

方案2:符合POSIX规范的预期值构造

按照POSIX文本输出规范,行末尾默认需要携带换行符,如果你程序的输出带换行属于预期正确行为,可以通过捕获println输出的方式构造预期值,不需要硬编码换行符,跨平台兼容性更好(自动适配Windows\r\n、类Unix\n的换行差异):

(deftest create-account-test
  (testing "Create account"
    (is (= ;; 构造带标准换行的预期输出,无硬编码换行符
           (with-out-str
             (println (cheshire/generate-string {:account {:active-card true :available-limit 100} :violations []})))
           (with-out-str
             (io/-main "test/sample-input.txt"))))))

两种方案的选择依据:如果程序输出的换行是符合需求的标准行为,优先选方案2;如果不需要关心末尾换行的差异,仅校验JSON内容正确性,优先选方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:15:01