如何使用Python的assert语句验证Point实例坐标移动的正确性
用assert测试Point类的move方法坐标正确性
没问题!我来一步步教你用assert语句验证Point类move方法的坐标移动正确性~
首先,先假设你的Point类大概是这样的(如果你的实现略有不同,只需对应调整测试逻辑即可):
class Point: def __init__(self, x=0, y=0): self.x = x self.y = y def move(self, dx, dy): # 这个方法修改当前实例的坐标 self.x += dx self.y += dy
核心思路
assert语句的作用是验证“预期结果”和“实际结果”是否一致,如果不一致就会抛出AssertionError,帮你快速定位问题。我们需要覆盖不同的移动场景,确保move方法在各种情况下都能正确更新坐标。
编写具体的测试用例
1. 基础正向移动测试
创建一个初始坐标的Point实例,调用move方法后,验证x、y是否按预期增加:
# 测试正向移动 p1 = Point(1, 2) p1.move(3, 4) # 验证x坐标:1+3=4 assert p1.x == 4, f"正向移动后x坐标错误:预期4,实际得到{p1.x}" # 验证y坐标:2+4=6 assert p1.y == 6, f"正向移动后y坐标错误:预期6,实际得到{p1.y}"
2. 负方向移动测试
测试向x、y轴负方向移动的情况,确保坐标正确减少:
# 测试负方向移动 p2 = Point(5, 5) p2.move(-2, -3) assert p2.x == 3, f"负向移动后x坐标错误:预期3,实际得到{p2.x}" assert p2.y == 2, f"负向移动后y坐标错误:预期2,实际得到{p2.y}"
3. 零位移测试
当dx和dy都为0时,坐标应该保持不变,这个边界场景也需要验证:
# 测试零位移移动 p3 = Point(10, -5) p3.move(0, 0) assert p3.x == 10, f"零位移后x坐标错误:预期10,实际得到{p3.x}" assert p3.y == -5, f"零位移后y坐标错误:预期-5,实际得到{p3.y}"
4. 原点出发的移动测试
验证从默认原点(0,0)出发的移动是否正确:
# 测试原点出发的移动 p4 = Point() # 初始x=0,y=0 p4.move(-7, 9) assert p4.x == -7, f"原点移动后x坐标错误:预期-7,实际得到{p4.x}" assert p4.y == 9, f"原点移动后y坐标错误:预期9,实际得到{p4.y}"
把测试组织成函数(更整洁)
你可以把所有测试用例放到一个函数里,方便一次性运行:
def test_point_move(): # 正向移动测试 p1 = Point(1, 2) p1.move(3, 4) assert p1.x == 4, f"正向移动失败:x预期4,实际{p1.x}" assert p1.y == 6, f"正向移动失败:y预期6,实际{p1.y}" # 负向移动测试 p2 = Point(5, 5) p2.move(-2, -3) assert p2.x == 3, f"负向移动失败:x预期3,实际{p2.x}" assert p2.y == 2, f"负向移动失败:y预期2,实际{p2.y}" # 零位移测试 p3 = Point(10, -5) p3.move(0, 0) assert p3.x == 10, f"零位移失败:x预期10,实际{p3.x}" assert p3.y == -5, f"零位移失败:y预期-5,实际{p3.y}" # 原点移动测试 p4 = Point() p4.move(-7, 9) assert p4.x == -7, f"原点移动失败:x预期-7,实际{p4.x}" assert p4.y == 9, f"原点移动失败:y预期9,实际{p4.y}" # 运行所有测试 test_point_move() print("所有测试通过!")
如果你的move方法是返回新实例(不可变Point)
如果你的Point类设计为不可变,move方法返回一个新的Point实例而不修改原实例,测试逻辑需要稍微调整:
# 不可变版本的Point类 class Point: def __init__(self, x=0, y=0): self.x = x self.y = y def move(self, dx, dy): # 返回新的Point实例,原实例不变 return Point(self.x + dx, self.y + dy) # 对应的测试 p = Point(2, 3) new_p = p.move(1, -1) # 验证新实例的坐标 assert new_p.x == 3, f"新实例x坐标错误:预期3,实际{new_p.x}" assert new_p.y == 2, f"新实例y坐标错误:预期2,实际{new_p.y}" # 额外验证原实例没有被修改 assert p.x == 2, f"原实例x坐标被意外修改:预期2,实际{p.x}" assert p.y == 3, f"原实例y坐标被意外修改:预期3,实际{p.y}"
小提示
- 一定要给assert加上自定义错误消息,这样测试失败时能立刻知道是哪个场景出了问题,不用自己猜。
- 尽量覆盖所有可能的场景:正向、负向、零、边界值(比如极大/极小的位移,如果需要的话),确保move方法的鲁棒性。
内容的提问来源于stack exchange,提问作者Kaleab Woldemariam
相关产品推荐
相关产品推荐

