该ddt
库旨在解决您所要求的unittest
[*]。
例如:
import ddt
import unittest
@ddt.ddt
class EvalTests(unittest.TestCase):
@ddt.data(
('1', 1),
('1 == 1', True),
('1 == 2', False),
('1 + 2', 4), ## This will fail
)
def test_eval_expressions(self, case):
expr, exp_value = case
self.assertEqual(eval(expr), exp_value)
当你运行它时,你会得到 4 个 TestCases 而不是一个:
$ python -m unittest -v test_eval.py
test_eval_expressions_1___1___1_ (test_eval.EvalTests) ... ok
test_eval_expressions_2___1__1___True_ (test_eval.EvalTests) ... ok
test_eval_expressions_3___1__2___False_ (test_eval.EvalTests) ... ok
test_eval_expressions_4___1_2___4_ (test_eval.EvalTests) ... FAIL
======================================================================
FAIL: test_eval_expressions_4___1_2___4_ (test_eval.EvalTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python/lib/site-packages/ddt.py", line 129, in wrapper
return func(self, *args, **kwargs)
File "/Work/test_eval.py", line 15, in test_eval_expressions
self.assertEqual(eval(expr), exp_value)
AssertionError: 3 != 4
----------------------------------------------------------------------
Ran 4 tests in 0.002s
FAILED (failures=1)
请注意,ddt尝试为生成的 TC 提供名称。
使用 pip 安装它:
pip install ddt
[*] pythonicpytest
框架 ( pytest.mark.parametrize
) 的相同解决方案已集成到核心工具中,pytest
仅针对此功能值得切换。