【问题标题】: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

【问题讨论】:

  • 是什么阻止了你这样做?
  • 这两个值是一个tuple

标签: 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 中没有什么反直觉的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-03
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多