太平洋建设21局网站,海丰网站建设,官方网址,wordpress文件上传目录 1. 基本知识2. API2.1 断言2.2 setUp() 和 tearDown() 3. Demo 1. 基本知识
unittest 是 Python 标准库中的一个单元测试框架#xff0c;用于编写和执行测试用例以验证代码的正确性
提供了一种结构化的方法来编写测试#xff0c;使得测试代码更加模块化和易于维护
以… 目录 1. 基本知识2. API2.1 断言2.2 setUp() 和 tearDown() 3. Demo 1. 基本知识
unittest 是 Python 标准库中的一个单元测试框架用于编写和执行测试用例以验证代码的正确性
提供了一种结构化的方法来编写测试使得测试代码更加模块化和易于维护
以下是对 unittest 的详细分析和示例
概念 测试用例Test Case测试代码的最小单元通常对应于要测试的函数、方法或类的特定行为或功能 测试用例是独立的不依赖于其他测试用例的执行顺序 测试套件Test Suite一组相关的测试用例的集合 可以使用测试套件来组织和运行一系列相关的测试 测试运行器Test Runner用于执行测试用例或测试套件的组件 unittest 提供了一个默认的测试运行器来运行测试 断言Assertion在测试用例中用于判断实际结果与预期结果是否相符的表达式 如果断言失败测试用例将会失败 设置Setup和清理Teardown在执行测试用例之前或之后执行的代码 使用 setUp() 方法在每个测试用例执行前进行设置操作 使用 tearDown() 方法在每个测试用例执行后进行清理操作
作用
自动化测试通过编写测试用例可以自动化地验证代码的正确性提高代码的质量和稳定性回归测试在修改或更新代码后可以运行测试用例来确保修改不会破坏现有功能文档化测试用例也可以作为代码的文档说明每个函数或方法应该如何被正确使用
2. API
在编写单元测试时通常会遵循一些规范和最佳实践以确保测试的可读性、可维护性和准确性
以下是一些常见的单元测试规范要求 测试用例命名规范测试用例的命名应该清晰明了描述被测试函数或方法的行为 通常采用test_functionality的命名方式例如test_add_positive_numbers和test_add_negative_numbers 测试用例设计完整性每个测试用例应该独立、完整地测试一个特定的行为或情况 不要在一个测试用例中测试多个不相关的行为 测试用例覆盖率尽可能覆盖被测试代码的各种情况包括边界情况、异常情况等 断言选择选择适当的断言来验证测试结果 常见的断言包括assertEqual、assertTrue、assertFalse等 测试组织结构通常测试用例会被组织成一个测试类每个测试方法对应一个测试用例 在Python中通常使用unittest模块来实现单元测试可以通过继承unittest.TestCase来创建测试类
2.1 断言
以下是几个常见的断言及其使用方式
assertEqual(expected, actual)用于验证预期值和实际值是否相等
import unittestclass TestExample(unittest.TestCase):def test_addition(self):result 2 2self.assertEqual(result, 4)if __name__ __main__:unittest.main()assertTrue(condition)用于验证条件是否为True
import unittestclass TestExample(unittest.TestCase):def test_positive_number(self):result 10self.assertTrue(result 0)if __name__ __main__:unittest.main()assertFalse(condition)用于验证条件是否为False
import unittestclass TestExample(unittest.TestCase):def test_negative_number(self):result -10self.assertFalse(result 0)if __name__ __main__:unittest.main()assertRaises(exception, callable, *args, **kwargs)用于验证是否会引发特定的异常
import unittestdef divide(x, y):return x / yclass TestExample(unittest.TestCase):def test_divide_by_zero(self):with self.assertRaises(ZeroDivisionError):divide(1, 0)if __name__ __main__:unittest.main()这些断言方法之间的区别在于它们用于验证的条件以及验证的方式
assertEqual用于检查值是否相等assertTrue和assertFalse用于检查条件是否为True或FalseassertRaises用于验证是否引发了特定的异常
在编写单元测试时根据需要选择最适合场景的断言方法以确保测试的准确性和可读性
2.2 setUp() 和 tearDown()
setUp() 和 tearDown() 是unittest框架中的两个特殊方法用于在测试用例执行前后进行设置和清理操作
它们的作用是确保测试用例在独立的环境中执行从而保证测试的可靠性和可重复性
setUp() ~ 在每个测试用例执行前进行设置操作例如初始化对象、创建临时文件或者建立数据库连接等 ~ 这个方法可以在测试用例的每次执行前提供一个统一的环境以确保测试用例在相同的初始条件下执行。如果测试用例需要共享一些设置setUp() 是一个很好的地方来定义它们这样可以避免在每个测试用例中重复代码tearDown() ~ 在每个测试用例执行后进行清理操作例如关闭文件、释放资源或者关闭数据库连接等 ~ 可以确保在测试用例执行后环境得到适当的清理以避免测试用例之间的相互影响。如果在 setUp() 中进行了一些设置需要在 tearDown() 中进行相应的清理以确保环境的恢复
示例代码
import unittestclass MyTestCase(unittest.TestCase):def setUp(self):# 设置操作例如初始化对象self.my_list [1, 2, 3]def tearDown(self):# 清理操作例如释放资源del self.my_listdef test_list_append(self):self.my_list.append(4)self.assertEqual(self.my_list, [1, 2, 3, 4])def test_list_remove(self):self.my_list.remove(2)self.assertEqual(self.my_list, [1, 3])if __name__ __main__:unittest.main()setUp() 方法用于在每个测试用例执行前初始化了一个列表 self.my_listtearDown() 方法用于在每个测试用例执行后清理了这个列表
两个测试方法 test_list_append() 和 test_list_remove() 分别对这个列表执行了添加和删除操作并通过断言来验证操作的正确性 setUp() 和 tearDown() 方法确保了每个测试方法在独立的环境中执行不会相互影响。
3. Demo
通过简易的Demo熟悉这个库的基本用法
import unittestdef add(x, y):return x yclass TestAddFunction(unittest.TestCase):def test_add_positive_numbers(self):self.assertEqual(add(1, 2), 3)self.assertEqual(add(0, 0), 0)self.assertEqual(add(-1, 1), 0)def test_add_negative_numbers(self):self.assertEqual(add(-1, -1), -2)self.assertEqual(add(-5, -7), -12)if __name__ __main__:unittest.main()截图如下 对应如果修改某个参数让程序报错截图如下