unittest测试用例中的重复代码

max*_*max 7 python refactoring unit-testing python-3.x

我有一个看起来像这样的测试用例:

def MyTestCase(unittest.Testcase):
  def test_input01(self):
    input = read_from_disk('input01')
    output = run(input)
    validated_output = read_from_disk('output01')
    self.assertEquals(output, validated_output)
  def test_input02(self):
    input = read_from_disk('input02')
    # ...
  # and so on, for 30 inputs, from input01 to input30
Run Code Online (Sandbox Code Playgroud)

现在,我知道测试代码可能有点重复,因为简洁比简洁更重要.但这变得非常容易出错,因为当我决定更改这里使用的某些功能的签名时,我不得不在所有30个地方进行更改.

我可以将它重构为已知输入的循环,但我确实希望每个输入都保持单独的测试,所以我认为我应该制作这些test_inputxx方法.

我究竟做错了什么?

Ned*_*der 12

编写一个帮助函数来删除测试用例中的重复:

def MyTestCase(unittest.Testcase):
  def run_input_output(self, suffix):
    input = read_from_disk('input'+suffix)
    output = run(input)
    validated_output = read_from_disk('output'+suffix)
    self.assertEquals(output, validated_output)

  def test_input01(self): self.run_input_output('01')
  def test_input02(self): self.run_input_output('02')
  def test_input03(self): self.run_input_output('03')
Run Code Online (Sandbox Code Playgroud)