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

请求协助实现可通过pytest断言的程序输出并为ejercicio5函数编写测试用例

请求协助实现可通过pytest断言的程序输出并为ejercicio5函数编写测试用例

嗨,我来帮你搞定这个pytest测试的问题!首先,你的ejercicio5函数现在是直接把内容打印到控制台,这就导致pytest没办法直接断言输出结果——毕竟我们没法直接拿控制台的输出做比对对吧?所以得先调整一下思路,要么修改函数让它返回要输出的内容,要么在测试里捕获标准输出。下面我给你两种方案,还有对应的测试用例:

方案一:修改函数,让它返回输出内容(推荐)

这种方式既保留了原函数的打印功能,又能让我们直接拿到输出字符串做断言,测试起来更灵活。修改后的函数如下:

def ejercicio5(s):
    output_lines = []
    for inner_list in s:
        # 遍历内列表的每个元素,添加到输出列表
        for item in inner_list:
            output_lines.append(str(item))
        # 添加分隔线
        output_lines.append("***************")
    # 把所有内容拼接成字符串,同时打印到控制台
    output_str = "\n".join(output_lines)
    print(output_str)
    return output_str

对应的pytest测试用例

我们可以针对不同的输入场景编写测试,覆盖空列表、单个内列表、多个内列表等情况:

def test_ejercicio5_multiple_inner_lists():
    # 测试多个内列表的情况
    input_data = [["apple", "banana"], ["cherry", "date"]]
    expected_output = "apple\nbanana\n***************\ncherry\ndate\n***************"
    assert ejercicio5(input_data) == expected_output

def test_ejercicio5_single_inner_list():
    # 测试单个内列表的情况
    input_data = [[1, 2, 3]]
    expected_output = "1\n2\n3\n***************"
    assert ejercicio5(input_data) == expected_output

def test_ejercicio5_empty_input():
    # 测试空输入的情况
    input_data = []
    expected_output = ""
    assert ejercicio5(input_data) == expected_output

def test_ejercicio5_empty_inner_list():
    # 测试包含空内列表的情况
    input_data = [[], ["test"]]
    expected_output = "***************\ntest\n***************"
    assert ejercicio5(input_data) == expected_output

方案二:不修改原函数,用pytest捕获控制台输出

如果你不想改动原函数的代码,可以用pytest内置的capsys fixture来捕获标准输出,这样就能拿到打印的内容做断言了。

原函数保留不变

def ejercicio5(s):
    for x in s:
        for z in x:
            print(z)
        print("***************")

对应的pytest测试用例

def test_ejercicio5_with_capsys(capsys):
    input_data = [["a", "b"], ["c"]]
    # 调用函数
    ejercicio5(input_data)
    # 捕获控制台输出
    captured = capsys.readouterr()
    # 注意:print会自动在末尾加换行,所以期望的输出要包含这些换行
    expected_output = "a\nb\n***************\nc\n***************\n"
    assert captured.out == expected_output

def test_ejercicio5_empty_with_capsys(capsys):
    input_data = []
    ejercicio5(input_data)
    captured = capsys.readouterr()
    assert captured.out == ""

小提示

  • 用capsys的时候要注意:每个print语句都会在输出末尾加一个换行符,所以期望的字符串要对应上这些换行。
  • 测试用例最好覆盖各种边界情况,比如空输入、空内列表、单个元素等,这样能确保函数的鲁棒性。

备注:内容来源于stack exchange,提问作者Gasper34

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 15:44:40