首页 > 解决方案 > 具有不同实现但返回相同值的两个函数的测试用例

问题描述

我有两个具有不同实现的函数返回相同的值,如何在不违反 DRY 原则的情况下为这两个函数运行相同的测试用例集?例如:我正在实现实现数字阶乘的递归和命令式方法。我希望为这两个功能运行相同的测试用例集。如何在不违反 DRY 的情况下实施?

标签: pythonpython-3.xunit-testingpython-unittest

解决方案


您的两个实现共享一个契约,您可以通过一组测试来表达它。例如,想象两个函数将其输入加倍:

def double_by_multiplying(value):
    return 2 * value


def double_by_adding(value):
    return value + value

使用使用 python unittest 的抽象测试用例中建议的方法之一,我们可以为任何将其输入加倍的函数编写一组通用测试,然后创建使用我们两个实现中的每一个的子类:

from unittest import TestCase


class DoublingContract:

    def test_input_gets_doubled(self):
        self.assertEqual(self.implementation(1), 2)


class DoubleMultiplicationTests(DoublingContract, TestCase):

    def setUp(self):
        self.implementation = double_by_multiplying


class DoubleAdditionTests(DoublingContract, TestCase):

    def setUp(self):
        self.implementation = double_by_adding

推荐阅读