请求协助实现可通过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
相关产品推荐
相关产品推荐

