pytest测试未通过求助:file_workers相关测试代码异常排查
pytest测试未通过的解决办法
问题核心原因
测试失败大概率是因为文件末尾换行符的差异:
readlines()会保留每行末尾的\n,但如果testfile.txt的最后一行three后面没有换行,返回的列表最后一个元素是'three',而你测试用例里的test_data最后一项是'three\n',两者不匹配。- 另外也要确认
testfile.txt的路径是否正确,pytest运行时是否能找到这个文件。
具体解决方案
方案1:修改测试用例的预期值
把test_data的最后一个元素改成不带换行的版本:
def test_read_from_file(): test_data = ['one\n', 'two\n','three'] assert test_data == read_from_file('testfile.txt')
方案2:给测试文件添加末尾换行
打开testfile.txt,在three后面敲回车保存,让文件内容实际包含末尾换行:
one two three
(注:最后一行three后面有一个换行符)
方案3:修改函数逻辑,统一处理换行符
如果希望函数返回不带换行的内容,调整read_from_file的实现:
def read_from_file(filepath): with open(filepath, 'r') as f_o: # 仅去掉每行末尾的换行符,保留其他空白字符 return [line.rstrip('\n') for line in f_o]
同时对应修改测试用例的预期值:
def test_read_from_file(): test_data = ['one', 'two','three'] assert test_data == read_from_file('testfile.txt')
额外检查:文件路径正确性
如果上述方法都无效,确认testfile.txt是否在pytest的运行目录下。可以临时用绝对路径测试验证:
# 替换成你的实际文件绝对路径 assert test_data == read_from_file('/Users/xxx/project/testfile.txt')
内容的提问来源于stack exchange,提问作者zoomkaXXX
相关产品推荐
相关产品推荐

