【发布时间】:2017-11-27 14:15:46
【问题描述】:
上下文:我正在关注 Steven F. Lott 的面向对象设计中的构建技能。我们的目标是试验轮盘赌的各种投注策略——通过为每个相关策略构建轮盘赌模拟和玩家。
我有一个基类 Player 和几个继承行为的 Player 子类 PlayerXY。
e.g. by design, each roulette bet must be paid for when placed
-- this is handled in the Player class and inherited by each PlayerXY subclass
问题:如何对子类的这种行为进行单元测试?
想法:我在下面概述了一些想法。
两难境地:
我知道我将添加更多 PlayerXY 类,我希望能够轻松地做到这一点。
我认为 Idea 1 提供了最大的灵活性:如果将来某个类的行为出于某种原因需要有所不同,我可以重写该特定测试(不影响其他课程!)。
但是,使用 Idea 1,每次我添加一个新的 PlayerXY 类时,我都需要在相应的 PlayerXYTest 中复制粘贴和编辑超过 50 行代码——而且我想知道这是否可以避免(不会陷入巨大的噩梦,以防其中一位玩家需要在未来改变)。
【问题讨论】:
-
你没有。继承的行为应该在父类中测试。
-
事实上,我更愿意对此进行测试。我在 SO 上看到了很多人们鼓励这样做的答案。
-
除非父类方法被覆盖,否则不应该在子类中测试它。如果您认为父类方法需要额外的测试,您可以将它们与父类的测试一起添加(如果您可以访问它,在这种情况下您可以访问它。)
-
好的,但是我如何回归——确保子类具有所需的行为呢?
-
@stanl3y SO鼓励不良实践有很多答案。
标签: python unit-testing inheritance tdd