如何对接收两个入参的函数使用assertEqual进行单元测试?
核心问题澄清
你对assertEqual的功能存在误解,它本身仅负责比对两个输入值是否相等,没有自动调用指定目标函数、自动传参执行的能力。你之前单参数场景的写法能生效,仅适用于函数会原地修改输入的可变对象的特殊情况,并不是assertEqual自动帮你执行了函数。
补充说明:如果你的函数输入是int、字符串、元组这类不可变类型,或者函数逻辑是返回计算结果而非修改原入参,你之前的单参数测试写法本身就是错误的,调用函数不会改变原始
inputted变量的值,测试结果毫无参考意义。
双入参场景的正确写法
场景1:和你单参数测试逻辑一致,函数原地修改第一个入参
这种情况直接在调用函数后,比对预期值和被修改的入参即可,不会触发报错:
def test_some_function(self): # 注意必须是列表、字典等可变对象才能被原地修改 inputted_one = [1] inputted_two = 2 some_function(inputted_one, inputted_two) output_expected = [1, 2] # 仅传入两个比对值即可,不需要把第二个入参也传给assertEqual self.assertEqual(output_expected, inputted_one)
场景2:函数有返回值、不修改原入参
这种场景下你要求避免的两种写法是Python单元测试的标准写法,没有替代方案。你之前的单参数写法在这种场景下完全不生效,不存在你认为的不需要显式调用函数的用法。
内容的提问来源于stack exchange,提问作者Yus Ra
相关产品推荐
相关产品推荐

