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)
そして、それを実行すると、1つではなく4つのテストケースが得られます。
$ 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
この機能だけに切り替える価値があります。