【问题标题】:How to unit test a function with two return values? [closed]如何对具有两个返回值的函数进行单元测试? [关闭]
【发布时间】:2018-11-02 05:08:57
【问题描述】:
我在一个类中有一个函数,它返回两个字典。
class A():
def __init__(self):
self.dict1={}
self.dict2={}
def funct1(self,a,b):
self.dict1['a']=a
self.dict2['b']=b
return self.dict1,self.dict2
我想写一个单元测试来测试返回两个字典的函数funct1
【问题讨论】:
标签:
python
python-3.x
unit-testing
【解决方案1】:
Python 函数只返回一个对象,总是。在您的情况下,该对象是一个包含两个对象的元组。
只需测试这两个对象;您可以在作业中解压它们并测试各个字典,例如:
def test_func1_single(self):
instance_under_test = A()
d1, d2 = instance_under_test.func1(42, 81)
self.assertEqual(d1, {'a': 42})
self.assertEqual(d2, {'b': 81})
def test_func1_(self):
instance_under_test = A()
d1, d2 = instance_under_test.func1(42, 81)
self.assertEqual(d1, {'a': 42})
self.assertEqual(d2, {'b': 81})
d3, d4 = instance_under_test.func1(123, 321)
# these are still the same dictionary objects
self.assertIs(d3, d1)
self.assertIs(d4, d2)
# but the values have changed
self.assertEqual(d1, {'a': 123})
self.assertEqual(d2, {'b': 321})
您测试的具体内容取决于您的特定用例和要求。
【解决方案2】:
一个简单的测试是
o = A() # creates an instance of A
a, b = o.funct1(1, 2) # call methods and unpack the result in two variables
assert a["a"] == 1 and b["b"] == 2 # test the values according to our precedent function call
在 python 中没有什么反直觉的