Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有不同实现但返回相同值的两个函数的测试用例_Python_Python 3.x_Unit Testing_Python Unittest - Fatal编程技术网

Python 具有不同实现但返回相同值的两个函数的测试用例

Python 具有不同实现但返回相同值的两个函数的测试用例,python,python-3.x,unit-testing,python-unittest,Python,Python 3.x,Unit Testing,Python Unittest,我有两个具有不同实现的函数,它们返回相同的值,如何在不违反DRY原则的情况下为这两个函数运行相同的测试用例集? 例如:我正在以递归和命令式的方式实现数字的阶乘。我希望为这两个函数运行相同的测试用例集。如何在不违反DRY的情况下实现?您的两个实现共享一个契约,您可以通过一组测试来表达该契约。例如,假设两个函数的输入翻倍: def double_by_multiplying(value): return 2 * value def double_by_adding(value):

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

您的两个实现共享一个契约,您可以通过一组测试来表达该契约。例如,假设两个函数的输入翻倍:

def double_by_multiplying(value):
    return 2 * value


def double_by_adding(value):
    return value + value
使用中建议的方法之一,我们可以为任何输入翻倍的函数编写一组通用测试,然后创建使用两个实现中的每一个实现的子类:

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