【问题标题】:Error with unit testing using selfassertAlmostEqual使用 selfassertAlmostEqual 进行单元测试时出错
【发布时间】:2021-11-15 20:33:35
【问题描述】:

是的,所以我在无法使用 selfassertAlmostEqual 的单元测试中遇到错误

in assertAlmostEqual
    diff = abs(first - second)
TypeError: unsupported operand type(s) for -: 'list' and 'list

这是我的单元测试方法,我收到错误任何关于如何修复它的想法谢谢。

def test_method_04(self):
        self.set_up()
        actual = self.bookshop.method_4(self.orders)
        expected = [(1, 678.33),(2, 494.46),(3, 364.8),(4, 492.57)]
        self.assertAlmostEqual(actual, expected, places = 2)
        print("METHOD4 \nACTUAL:")
        for line in actual:
            print(line)
        print("EXPECTED:")
        for line in expected:
            print(line)
'

【问题讨论】:

    标签: python computer-science


    【解决方案1】:

    您不能将self.assertAlmostEqual 与列表一起使用。您只能将其与数字一起使用。出现您的错误是因为self.assertAlmostEqual 减去它正在比较的两个数字并断言差异足够小。您正在传递 self.assertAlmostEqual 两个列表,它不能减去列表。

    虽然 Python 中的许多对象可以比较为相等,但并不是每个对象都可以被认为是几乎相等的。例如,是否可以认为两个字符串几乎等于 2 位小数?

    不幸的是,这意味着比较您的两个列表会变得有些棘手。没有内置断言可以比较您的两个列表并断言相应位置的所有数字几乎相等。相反,您必须断言您的列表具有相同的长度,然后对于列表中每对相应的 2 元组,断言元组的第一个值是相等的(或者可能几乎相等 - 这从你的问题)和第二个值几乎相等。

    尝试以下方法:

    self.assertEqual(len(expected), len(actual))
    for i in range(len(expected)):
        self.assertEqual(expected[i][0], actual[i][0])
        self.assertAlmostEqual(expected[i][1], actual[i][1], places = 2)
    

    或许

    self.assertEqual(len(expected), len(actual))
    for ((expected_a, expected_b), (actual_a, actual_b)) in zip(expected, actual):
        self.assertEqual(expected_a, actual_a)
        self.assertAlmostEqual(expected_b, actual_b, places = 2)
    

    随意给变量名称expected_a 等赋予更有意义的名称:我不知道您列表中的数字对是什么意思。

    【讨论】:

      猜你喜欢
      • 2018-11-16
      • 2017-04-04
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多