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]))
我目前正在为这个名为 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]))