Python单元测试 unittest 简单入门
本文属于文档摘要(中英文对照看,有些内容确实翻译得很生硬,有些词也是不翻译更通俗易懂),同时也会加上一些个人的理解,纯当学习了哈。 单元测试的重要性 完整版本: 单元测试是软件开发过程中的一个基本实践,它的重要性体现在以下几个方面: 早期错误检测:单元测试允许开发者在代码开发的早期阶段发现和修复错误。这有助于减少错误在软件生命周期中的传播,从而节省了在后期发现和修复这些错误所需的时间和成本。 提高代码质量:通过编写单元测试,开发者被迫更仔细地思考他们的代码结构和逻辑。这种思考过程往往能导致代码质量的提高。 设计改善:编写单元测试可以促使开发者设计出更加模块化和松耦合的代码,因为这样的代码更易于测试。 文档化:单元测试可以作为一种形式的文档,展示函数或方法应该如何被使用,以及它们预期的行为。这有助于其他开发者理解代码的意图和功能。 持续集成和部署:单元测试是持续集成(CI)和持续部署(CD)过程的关键组成部分。自动化的单元测试可以在代码更改后立即运行,确保新的代码更改没有破坏现有的功能。 重构安全网:当需要进行代码重构以改善性能或可维护性时,单元测试提供了一个安全网,确保重构过程没有引入新的错误。 信心和速度:有了可靠的单元测试套件,开发者可以更有信心地进行代码更改,因为他们可以快速验证这些更改是否导致了预期的结果。 团队协作:单元测试有助于团队协作,因为它们为代码的质量设置了一个明确的基准。这使得代码审查更加高效,因为审查者可以专注于代码的设计和结构,而不是基本的正确性。 总之,单元测试是确保软件质量、可靠性和可维护性的关键实践。它们为开发者提供了一种方法,可以在不依赖于手动测试或全面集成测试的情况下,频繁且快速地验证代码的正确性。 简要版本: 单元测试是确保代码质量、可靠性和可维护性的关键实践。它能早期发现和修复错误,提高代码质量,促进更好的设计,并作为文档和持续集成的安全网,增强开发者信心,加快开发速度。 以上总结内容生成自智谱清言。 我个人的观点:单元测试拆分成单元和测试,单元意味着被测的对象要足够小,这样才能被称为一个单元,这一定程度上也就是上面提到的2,3,也是 SOLID 原则的部分体现;而测试意味着你可以在代码发布到生产环境之前,或者是更早,就能提前运行你的代码,而且是按照你所设想的方式,无论是异常的方式,亦或是正常的方式,这无疑也能提升我们对代码质量的信心。在《重构》一书中,作者提到了: 每当我要进行重构的时候,第一个步骤永远相同:我得确保即将修改的代码拥有一组可靠的测试。 … 进行重构时,我需要依赖测试。我将测试视为 bug 检测器。 … 把我想要 达成的目标写两遍——代码里写一遍,测试里再写一遍——我就得犯两遍同样的错误才能骗过检测器。 所以单元测试其实是伴随业务代码一整个生命周期的。 刚开始创建代码的时候,写 UT 为了自行测试程序逻辑是否符合预期 重构时,UT 能够确保重构后的结果没有影响到程序,即重构前后,程序在外部观测下的行为没有发生改变。 协作时,UT 也能够作为一种让其他人了解某段程序意图的渠道。 unittest — Unit testing framework¶ 基本概念 最最最基本的一个示例 # 首先要导入unittest 的包,这样才能使用它。 import unittest # 继承unittest.TestCase,这样就能使用该父类的方法 # 比如assertTrue、assertEqual、assertRaises class TestStringMethods(unittest.TestCase): # 三个测试用例 def test_upper(self): self.assertEqual('foo'.upper(), 'FOO') def test_isupper(self): self.assertTrue('FOO'.isupper()) self.assertFalse('Foo'.isupper()) def test_split(self): s = 'hello world' self.assertEqual(s.split(), ['hello', 'world']) # check that s....