Python中继承行为的单元测试

2024-09-24 22:17:05 发布

您现在位置:Python中文网/ 问答频道 /正文

背景我正在学习Steven F。洛特。我们的目标是试验各种轮盘赌的投注策略——通过建立一个轮盘赌模拟,并为每个策略创建一个玩家

我有一个基类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类,我希望能够很容易地做到这一点

  • 我认为想法1提供了最大的灵活性:如果出于任何原因其中一个类的行为将来需要不同,我可以重写这个特定的测试(而不影响其他类!)

  • 然而,使用Idea 1,每次我添加一个新的PlayerXY类时,我都需要在相应的PlayerXYTest中复制、粘贴和编辑超过50行的代码——我想知道这是否可以避免(如果将来有一个玩家需要更改的话,我不会陷入巨大的噩梦)


Tags: 目标by玩家轮盘基类子类策略design
1条回答
网友
1楼 · 发布于 2024-09-24 22:17:05

想法1:将测试放入外部模块,然后从PlayerXY的每个单元测试调用它

(player_common.py)

def test_placing_bet_reduces_stake(self, player):
  ...
  self.assertEqual(...)

以及

import player_common

class Player17Test(unittest.TestCase):

  def test_placing_bet_reduces_stake(self):
      player = Player17()
      player_common.test_placing_bet_reduces_stake(self, player)


想法2:为基类Player编写测试,然后在子类中继承
class PlayerTest(unittest.TestCase):

  def test_placing_bet_reduces_stake(self):
    ...

以及

class Player17Test(PlayerTest):
  ...

想法3:将测试放入外部模块,并将其导入PlayerXY的每个单元测试中

(player_common.py)

def test_placing_bet_reduces_stake(self):
  ...
  self.assertEqual(...)

以及

class Player17Test(unittest.TestCase):

  from player_common import test_placing_bet_reduces_stake

相关问题 更多 >