简单灵活的单元测试参数化。
项目描述
unittest_expander是一个 Python 库,它提供灵活且易于使用的工具来参数化您的单元测试,尤其是基于unittest.TestCase的那些。
该库与 Python 2.6、2.7、3.2、3.3 和 3.4 兼容,并且不依赖于外部包(仅使用 Python 标准库)。
- 作者:
扬·卡利舍夫斯基(左)
- 执照:
麻省理工学院许可证
- 主页:
- 文档:
安装
安装库的最简单方法是执行(可能在 virtualenv中)命令:
pip install unittest_expander
(请注意,您需要网络访问才能这样做;如果您没有安装pip工具 - 请参阅: https ://pip.pypa.io/en/latest/installing.html )。
或者,您可以下载库源存档,解压,cd到解压后的目录并执行以下命令:
python setup.py install
(您可能需要具有管理员权限和/或网络访问权限,特别是如果您不在virtualenv中执行它)。
也可以在不安装的情况下使用该库:由于其代码包含在单个文件 ( unittest_expander.py ) 中,您只需将其复制到您的项目中即可。
使用示例
考虑以下丑陋的测试:
import unittest
class Test(unittest.TestCase):
def test_sum(self):
for iterable, expected in [
([], 0),
([0], 0),
([3], 3),
([1, 3, 1], 5),
(set([1, 3]), 4),
({1:'a', 3:'b'}, 4),
]:
self.assertEqual(sum(iterable), expected)
酷吗? 一点也不! 所以让我们改进它:
import unittest
from unittest_expander import expand, foreach
@expand
class Test(unittest.TestCase):
@foreach(
([], 0),
([0], 0),
([3], 3),
([1, 3, 1], 5),
(set([1, 3]), 4),
({1:'a', 3:'b'}, 4),
)
def test_sum(self, iterable, expected):
self.assertEqual(sum(iterable), expected)
现在您有6 个不同的测试(正确隔离并始终报告为单独的测试),尽管它们共享相同的测试方法源。
您可能希望以更详细和更具描述性的方式执行相同操作:
import unittest
from unittest_expander import expand, foreach, param
@expand
class Test(unittest.TestCase):
test_sum_params = [
param([], expected=0).label('empty gives 0'),
param([0], expected=0),
param([3], expected=3),
param([1, 3, 1], expected=5),
param(set([1, 3]), expected=4),
param({1:'a', 3:'b'}, expected=4).label('even dict is ok'),
]
@foreach(test_sum_params)
def test_sum(self, iterable, expected):
self.assertEqual(sum(iterable), expected)
这只是unittest_expander 提供给您的一小部分可能性。
您可以从模块的实际文档中了解更多信息。