3、请使用unittest框架对二分查找函数进行单元测试: 测试用例要考虑正常的输入和不正常的输入。
时间: 2024-09-06 21:05:49 浏览: 35
第二单元+编程计算+单元测试+2022-2023学年教科版(2019)高中信息技术必修1
在Python中,使用unittest框架进行单元测试是一种常见的实践,它允许我们编写测试用例来验证代码的功能。对于一个二分查找函数,我们需要编写多个测试用例以确保其在各种输入情况下都能正确工作。以下是一个使用unittest框架进行测试的基本示例:
首先,我们需要一个二分查找的函数实现。这里假设我们已经有了这样一个函数:
```python
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
```
接下来,我们可以创建一个测试类,继承自`unittest.TestCase`,并编写不同的测试方法:
```python
import unittest
class TestBinarySearch(unittest.TestCase):
def test_normal_input(self):
# 测试正常输入的情况
self.assertEqual(binary_search([1, 2, 3, 4, 5], 3), 2)
self.assertEqual(binary_search([1, 2, 3, 4, 5], 5), 4)
self.assertEqual(binary_search([1, 2, 3, 4, 5], 1), 0)
def test_empty_list(self):
# 测试空列表的情况
self.assertEqual(binary_search([], 3), -1)
def test_no_match(self):
# 测试查找元素不在列表中的情况
self.assertEqual(binary_search([1, 2, 3, 4, 5], 6), -1)
def test_single_element(self):
# 测试只有一个元素的列表
self.assertEqual(binary_search([1], 1), 0)
self.assertEqual(binary_search([1], 3), -1)
def test_duplicates(self):
# 测试包含重复元素的列表
self.assertEqual(binary_search([1, 2, 3, 3, 4, 5], 3), 2)
def test_large_numbers(self):
# 测试大数的查找
large_list = [i for i in range(1000000)]
self.assertEqual(binary_search(large_list, 987654), 987654)
def test_negative_numbers(self):
# 测试负数的查找
self.assertEqual(binary_search([-5, -3, 0, 2, 4, 6], -3), 1)
if __name__ == '__main__':
unittest.main()
```
在上面的测试类中,我们考虑了以下几种情况:
- 正常输入的查找结果
- 空列表的查找结果
- 查找元素不在列表中的结果
- 只有一个元素的列表的查找结果
- 列表中包含重复元素的查找结果
- 列表中包含大数的查找结果
- 列表中包含负数的查找结果
通过这些测试用例,我们可以较为全面地验证二分查找函数的正确性。
阅读全文