python - 具有不同实现但返回相同值的两个函数的测试用例
问题描述
我有两个具有不同实现的函数返回相同的值,如何在不违反 DRY 原则的情况下为这两个函数运行相同的测试用例集?例如:我正在实现实现数字阶乘的递归和命令式方法。我希望为这两个功能运行相同的测试用例集。如何在不违反 DRY 的情况下实施?
解决方案
您的两个实现共享一个契约,您可以通过一组测试来表达它。例如,想象两个函数将其输入加倍:
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
推荐阅读
- mysql - JOIN 语句的另一个子字符串中包含的字段的 SQL 子字符串
- php - “另存为对话框”事件
- typescript - 是否可以使用 parceljs 将 EaselJS (CreateJS) 与 TypeScript 一起使用?
- c# - 使用 http 客户端从 USDA 访问 Web api 数据时遇到问题
- python - 如何使用pyspark在jupyter中将aws桶中的镶木地板作为熊猫读取
- c# - ASP.NET Core Identity 自定义 IdentityRole 导致 UserManager 异常
- docker - Gitlab runner,私人仓库,docker executor 不使用主机的主机文件
- apache - 在子文件夹中使用 symfony 4 时找不到/匹配的路由
- javascript - Puppeteerjs 无法使用代理无头运行
- java - 我的代码有问题,线程“main”中的异常?