单元测试text_to_html函数触发断言错误的原因及解决方法咨询
问题原因
- 测试用的多行三引号字符串会保留每行的前置缩进:你定义
string变量时,THIS、IS A TEST、STRING每行前面的多个空格属于字符串的原生内容,你的text_to_html函数仅替换了换行符为<br>,没有处理这些前置空格,因此转换结果和你写的预期输出string_output不匹配。 - 单元测试断言参数顺序可能有误:
unittest的assertEqual方法常规用法是assertEqual(预期值, 实际值),如果参数顺序写反会导致报错信息里的预期/实际标注倒置。
解决方法
根据你的需求可以选择以下两种方案:
方案1:修正测试用例,保留原转换逻辑
如果你不需要修改text_to_html的转换规则,仅需要测试通过,可以先处理测试用的字符串,去掉多余的公共前置缩进:
import textwrap import unittest class TestDebtModules(unittest.TestCase): def test_html(self): # 用textwrap.dedent自动去掉多行字符串的公共前置缩进 string = textwrap.dedent(""" THIS IS A TEST STRING """) string_input = text_to_html(string) string_output = r'<p><br>THIS<br>IS A TEST<br>STRING<br></p>' self.assertEqual(string_output, string_input)
方案2:修改转换函数,自动去除每行前后空白
如果你希望转换HTML时自动忽略每行的前后空白,可以调整text_to_html的实现逻辑:
def text_to_html(text): """ Convert text into HTML Args: text (str): text to convert Returns: str: HTML string """ # 拆分每行后去除前后空白,过滤空行后用<br>拼接 processed_lines = [line.strip() for line in text.splitlines() if line.strip()] html = "<p>" + "<br>".join(processed_lines) + "</p>" return html
修改后不需要调整测试用例,直接运行即可通过断言。
内容的提问来源于stack exchange,提问作者banana_99
相关产品推荐
相关产品推荐

