使用@pytest.mark.parametrize测试双返回值函数遇断言错误求助
问题排查与修复
错误原因
你使用的pdt.assert_frame_equal是pandas测试工具中专门用来比较两个DataFrame是否相等的断言方法,它仅接受DataFrame类型的参数。但你的函数col_names(test)返回的是包含两个元素的元组(带列名的DataFrame, 列名列表),直接把整个元组传给assert_frame_equal,必然触发类型不匹配错误。
修复方案
需要拆分函数的返回值,分别验证两个结果:
- 提取返回元组中的DataFrame部分,用
assert_frame_equal和预期的ex1比较 - 提取返回的列名列表,用普通断言和
ex2比较
修改后的测试代码如下:
@pytest.mark.parametrize( "test, ex1, ex2", [ (pd.DataFrame(list(zip([1, 2], [3, 4], [5, 6]))), pd.DataFrame({'Col1': [1, 2], 'Col2': [3, 4], 'Col3': [5, 6]}), ['Col1', 'Col2', 'Col3']), ]) def test_col_names(test, ex1, ex2): # 拆分函数返回的元组 result_df, result_cols = packagename.modulename.col_names(test) # 验证DataFrame是否符合预期 pdt.assert_frame_equal(result_df, ex1) # 验证列名列表是否符合预期 assert result_cols == ex2
额外注意事项
如果测试时遇到索引或数据类型的校验问题,可在assert_frame_equal中添加参数调整校验规则,例如:
pdt.assert_frame_equal(result_df, ex1, check_index_type=False, check_dtype=False)
内容的提问来源于stack exchange,提问作者Meronam
相关产品推荐
相关产品推荐

