新手怎样学校做网站wordpress构建android
2026/4/6 11:45:14 网站建设 项目流程
新手怎样学校做网站,wordpress构建android,三合一网站方案,可信网站身份验证 必须做吗Day 34#xff1a;【99天精通Python】单元测试 (Unittest) - 给代码上个保险 前言 欢迎来到第34天#xff01; 在之前的开发中#xff0c;我们通常是怎么验证代码对不对的#xff1f; —— 写完代码#xff0c;手动运行一下#xff0c;输入几个参数#xff0c;看看打印结…Day 34【99天精通Python】单元测试 (Unittest) - 给代码上个保险前言欢迎来到第34天在之前的开发中我们通常是怎么验证代码对不对的—— 写完代码手动运行一下输入几个参数看看打印结果对不对。这种人工测试方式在小脚本里还行但当项目变大时效率低每次改个小功能都要把所有功能手动测一遍累死人。不可靠人是会犯错的容易漏测某些边界情况比如除以0、空输入。不敢重构想优化代码又怕改坏了以前的功能导致不敢动。单元测试 (Unit Testing)就是为了解决这些问题。我们写一段代码测试脚本来专门检测另一段代码业务逻辑。一旦业务代码被修改只需一键运行测试脚本几秒钟就能知道有没有把旧功能改坏。本节内容什么是单元测试Python 内置模块unittest常用断言方法 (assertEqual,assertTrue…)测试固件setUp与tearDown实战练习为银行账户类编写测试一、第一个测试用例假设我们有一个简单的函数add(a, b)# math_func.pydefadd(a,b):returnab我们想测试它对不对。使用unittest模块# test_math.pyimportunittestfrommath_funcimportadd# 1. 定义一个测试类必须继承 unittest.TestCaseclassTestMathFunc(unittest.TestCase):# 2. 定义测试方法必须以 test_ 开头deftest_add_integers(self):测试整数相加resultadd(1,2)# 3. 断言判断 result 是否等于 3self.assertEqual(result,3)deftest_add_strings(self):测试字符串相加resultadd(hello, world)self.assertEqual(result,hello world)# 4. 运行测试if__name____main__:unittest.main()运行test_math.py如果一切正常控制台会显示OK。如果把add函数改成return a - b运行测试就会报错FAIL。二、常用断言 (Assertions)断言是测试的核心用来判断实际结果与预期结果是否一致。方法检查内容assertEqual(a, b)a bassertNotEqual(a, b)a ! bassertTrue(x)x为真assertFalse(x)x为假assertIn(item, container)item在容器中assertIsNone(x)x是 NoneassertRaises(Error, func)func执行时抛出指定异常示例测试除法异常defdivide(a,b):ifb0:raiseValueError(除数不能为0)returna/bclassTestDivide(unittest.TestCase):deftest_divide_zero(self):# 断言执行 divide(10, 0) 时应该抛出 ValueErrorwithself.assertRaises(ValueError):divide(10,0)三、测试固件setUp 与 tearDown有时候每个测试用例运行前都需要做一些准备工作比如连接数据库、创建临时文件运行后需要清理断开连接、删除文件。这时就用到setUp前置和tearDown后置。setUp(): 每个test_方法运行前自动执行。tearDown(): 每个test_方法运行后自动执行。classTestDatabase(unittest.TestCase):defsetUp(self):print(\n--- 连接数据库 ---)self.db{user:admin}# 模拟数据库连接deftearDown(self):print(--- 断开连接 ---)self.dbNonedeftest_query(self):print(执行查询测试)self.assertEqual(self.db[user],admin)deftest_update(self):print(执行更新测试)self.db[user]rootself.assertEqual(self.db[user],root)执行顺序setUp-test_query-tearDownsetUp-test_update-tearDown注意每个测试用例之间是相互独立的。test_update修改了数据不会影响test_query因为它在下一次运行时会重新setUp。四、实战练习测试银行账户类回顾一下 Day 14 写的BankAccount类我们给它加上单元测试。业务代码 (bank.py)classBankAccount:def__init__(self,balance0):self.balancebalancedefdeposit(self,amount):ifamount0:raiseValueError(存款金额必须大于0)self.balanceamountreturnself.balancedefwithdraw(self,amount):ifamountself.balance:raiseValueError(余额不足)self.balance-amountreturnself.balance测试代码 (test_bank.py)importunittestfrombankimportBankAccountclassTestBankAccount(unittest.TestCase):defsetUp(self):# 每次测试前都创建一个初始余额为 100 的账户self.accountBankAccount(100)deftest_deposit(self):测试存款正常new_balanceself.account.deposit(50)self.assertEqual(new_balance,150)self.assertEqual(self.account.balance,150)deftest_deposit_negative(self):测试存负数报错withself.assertRaises(ValueError):self.account.deposit(-10)deftest_withdraw(self):测试取款正常self.account.withdraw(30)self.assertEqual(self.account.balance,70)deftest_withdraw_overdraft(self):测试透支报错withself.assertRaises(ValueError):self.account.withdraw(200)if__name____main__:unittest.main()五、如何运行测试5.1 命令行运行在终端中不需要修改代码直接运行# 运行指定文件python -m unittest test_bank.py# 自动发现并运行当前目录下所有 test_*.py 文件python -m unittest discover5.2 生成测试报告虽然unittest自带的输出很简单但我们可以配合第三方库如HTMLTestRunner不过现在更流行用pytest来生成漂亮的 HTML 报告。我们会在进阶课程的最后介绍更强大的pytest框架。现在先掌握unittest的基础。六、常见问题Q1为什么我的测试方法没运行请检查方法名是否以test_开头。如果写成def check_add(self):unittest会忽略它。Q2测试代码和业务代码应该放在一起吗不建议。通常在项目根目录下创建一个tests/文件夹专门存放测试脚本。Q3unittest和pytest哪个好unittestPython 内置不需要安装符合 xUnit 标准类、setUp/tearDown适合学习原理。pytest第三方库语法更简单不需要写类直接写 assert插件丰富。实际工作中推荐用 pytest但它是建立在对测试原理理解的基础上的。七、小结单元测试 unittestTestCase 类断言方法生命周期继承 unittest.TestCase方法名必须以 test_ 开头assertEqual (相等)assertTrue (真)assertRaises (异常)setUp() (每例开始前)test_xxx() (运行测试)tearDown() (每例结束后)关键要点测试是保险它保证了你的代码在修改后依然符合预期。独立性每个测试用例应该是独立的互不干扰。覆盖率不仅要测正常情况更要测异常情况如存负数、取款透支。八、课后作业字符串工具测试编写一个函数is_palindrome(s)判断字符串是否为回文如 “aba”。编写测试用例覆盖回文串、非回文串、空字符串、含空格的字符串。购物车测试为 Day 16 的Cart类编写测试。测试功能add添加商品len计算数量以及确保添加重复商品时逻辑是否符合预期假设允许重复。修复 Bug在练习1中如果输入的字符串包含大小写如 “Racecar”你的函数能正确判断吗编写一个失败的测试用例然后修改原函数代码直到测试通过。下节预告Day 35综合实战 - 爬虫与数据分析可视化(上)- 进阶篇的理论知识学得差不多了。接下来的几天我们将做一个真·实战项目爬取真实的网站数据存入数据库并生成精美的图表系列导航上一篇Day 33 - 日志记录Logging下一篇Day 35 - 综合实战爬虫与可视化上待更新

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询