3、请使用unittest框架对二分查找函数进行单元测试: 测试用例要考虑正常的输入和不正常的输入
时间: 2024-09-07 13:01:40 浏览: 32
第二单元+编程计算+单元测试+2022-2023学年教科版(2019)高中信息技术必修1
在使用unittest框架进行单元测试时,首先需要导入unittest模块,然后创建一个继承自`unittest.TestCase`的测试类,并在测试类中编写测试方法。对于二分查找函数的单元测试,我们需要考虑的测试用例包括:
1. 正常输入:确保函数能够正确处理有序列表中的元素查找。
2. 不正常输入:确保函数能够正确处理异常情况,例如空列表、单元素列表、目标值不在列表范围内以及目标值重复的情况。
下面是一个简单的二分查找函数的测试用例示例:
```python
import unittest
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = left + (right - left) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
class TestBinarySearch(unittest.TestCase):
def test_normal_input(self):
self.assertEqual(binary_search([1, 3, 5, 7, 9], 7), 3)
def test_empty_list(self):
self.assertEqual(binary_search([], 1), -1)
def test_single_element(self):
self.assertEqual(binary_search([5], 5), 0)
def test_target_not_in_list(self):
self.assertEqual(binary_search([1, 2, 3], 4), -1)
def test_target_at_beginning(self):
self.assertEqual(binary_search([1, 2, 3, 4, 5], 1), 0)
def test_target_at_end(self):
self.assertEqual(binary_search([1, 2, 3, 4, 5], 5), 4)
def test_duplicate_target(self):
self.assertEqual(binary_search([1, 2, 3, 3, 5], 3), 2)
if __name__ == '__main__':
unittest.main()
```
在这个示例中,我们定义了一个`binary_search`函数,它执行二分查找并返回目标值的索引或-1。接着,我们创建了一个`TestBinarySearch`类,其中包含多个测试方法,分别对应不同的测试情况。
在测试方法中,使用`assertEqual`来检查函数输出是否符合预期。如果函数的返回值与预期值相符,则测试通过;如果不相符,则测试失败,并显示错误信息。
阅读全文