Python 单元测试如何为双数和添加 "OR"

Python Unittest how to add an "OR" for Two Number Sum

我目前正在为这个名为 twoNumberSum 的问题编写测试,该问题只是要求 return 给定数组上的 2 个数字,它们加起来等于 target_number .在我的测试中,我目前检查这 2 个数字是否存在,但是我如何检查它们是否在数组中,以及如何声明顺序无关紧要?我有这个

import unittest
from problems import two_number_sum

class TestTwoNumberSum(unittest.TestCase):
    def test_two_number_sum(self):
        result = two_number_sum.twoNumberSum([4, 6, 1, -3], 3)
        self.assertTrue(len(result))
        self.assertTrue(6 in result)
        self.assertTrue(-3 in result)
        # self.assertEqual(result, [6, -3])

这一行就在这里,检查值是否在一个数组中,# self.assertEqual(result, [6, -3])(或者至少我是这么认为的,因为我是新手)。这是有效的代码,

def twoNumberSum(array, targetSum):
    array.sort()
    left = 0
    right = len(array) - 1
    while left < right:
        currentSum = array[left] + array[right]
        if currentSum == targetSum:
            return [array[left], array[right]]
            # return array[left], array[right]
        elif currentSum < targetSum:
            left += 1
        elif currentSum > targetSum:
            right -= 1
    return []

但请注意我在终端上看到的内容,

Traceback (most recent call last):
  File "/Users/jeffersonlopezgarcia/Desktop/App Academy/Diagnostic/tests/two_number_sum_test.py", line 10, in test_two_number_sum
    self.assertEqual(result, [6, -3])
AssertionError: Lists differ: [-3, 6] != [6, -3]

First differing element 0:
-3
6

- [-3, 6]
+ [6, -3]

因此我想学习怎么说,可能是这个 OR 这个另一个。意思是,顺序 NOT 很重要。另外,问题说顺序无关紧要。

        self.assertTrue(len(result))
        self.assertTrue(6 in result)
        self.assertTrue(-3 in result)

这仅检查是否:There are 2 numbers,以及是否 the 2 numbers are there 加起来等于 target_number

此外,我该如何在此处提出错误?

一个简单的解决方案是将您的列表转换为测试集。集合是“无序”数据结构,本质上不关心其元素的顺序。

self.assertEqual(set(result), set([6, -3]))
# you can also just create a set directly like this
self.assertEqual(result, {6, -3})

单元测试库还可以让您断言任意布尔表达式为真。这样的事情也会起作用。对于长度超过两个的列表,集合会更好,因为使用这种方法,您必须在 OR 表达式中列出列表的所有可能排列。

self.assertTrue(result == [6, -3] or result == [-3, 6])

https://docs.python.org/3.9/library/stdtypes.html#set-types-set-frozenset

如果对结果进行排序,则可以简化检查,因为只会有一个结果。

self.assertEqual(sorted(result), [-3, 6])

或者您可以在 assertTrue().

中使用 or
self.assertTrue(result == [6, -3] or result == [-3, 6])

另一个解决方案是比较两组。

self.assertEqual(set(result), set([6, -3]))