第5章:Python TDD定义Dollar对象相等性
写在前面
这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许优质的单元测试是一个切入点。 就我个人而言,这本书确实很有帮助。第一次读的时候,很多细节我都不太懂,但将书中内容应用到工作中后,我受益匪浅。比如面对一些让人抓狂的代码设计时,书里的方法能让我逐步深入理解代码的逻辑与设计。 作为一名测试开发工程师,我想把学习这本书的经验分享给大家,希望能给大家带来帮助。因为现在工作中大多使用 Python 代码,所以我把书中JAVA案例都用 Python 代码进行了改写 。
问题背景说明
在货币类的开发中,判断两个货币对象是否相等是一个常见的操作。例如,在比较两个美元金额是否相等时,需要有明确的判断标准。如果没有正确定义相等性,可能会导致程序在进行货币比较、集合操作等场景下出现逻辑错误,影响程序的正确性。
在Python TDD中,定义对象的相等性对于确保代码的准确性和逻辑正确性至关重要。对于Dollar
对象,我们需要明确在什么情况下两个Dollar
对象被认为是相等的。
5.1 思路说明
通过实现__eq__
方法(在Python中用于定义对象相等性的特殊方法),我们可以自定义Dollar
对象的相等性判断逻辑。通常情况下,对于Dollar
对象,当两个对象的金额相等时,我们认为它们相等。
5.2 测试代码
import unittest
class Dollar:
def __init__(self, amount):
self.amount = amount
def __eq__(self, other):
if isinstance(other, Dollar):
return self.amount == other.amount
return False
class TestDollarEquality(unittest.TestCase):
def test_dollar_equality(self):
dollar1 = Dollar(5)
dollar2 = Dollar(5)
self.assertEqual(dollar1, dollar2)
def test_dollar_inequality(self):
dollar1 = Dollar(5)
dollar2 = Dollar(10)
self.assertNotEqual(dollar1, dollar2)
if __name__ == '__main__':
unittest.main()
5.3 源码说明
在Dollar
类中,__eq__
方法首先使用isinstance
函数判断传入的对象other
是否为Dollar
类的实例。如果是,则比较两个对象的amount
属性是否相等;如果不是Dollar
类的实例,则直接返回False
。在测试类TestDollarEquality
中,test_dollar_equality
测试用例创建了两个金额都为5
的Dollar
对象,验证它们是否相等;test_dollar_inequality
测试用例创建了两个金额不同的Dollar
对象,验证它们是否不相等,通过这两个测试用例确保__eq__
方法的正确性。