【发布时间】:2015-11-18 20:48:21
【问题描述】:
我在 python 中有一些类似的单元测试。 如此相似,以至于只有一个论点在改变。
class TestFoo(TestCase):
def test_typeA(self):
self.assertTrue(foo(bar=TYPE_A))
def test_typeB(self):
self.assertTrue(foo(bar=TYPE_B))
def test_typeC(self):
self.assertTrue(foo(bar=TYPE_C))
...
显然这不是很干,如果你有 4-5 个不同的选项,代码将会非常重复
现在我可以做这样的事情了
class TestFoo(TestCase):
BAR_TYPES = (
TYPE_A,
TYPE_B,
TYPE_C,
...
)
def _foo_test(self, bar_type):
self.assertTrue(foo(bar=bar_type))
def test_foo_bar_type(self):
for bar_type in BAR_TYPES:
_foo_test(bar=bar_type))
这可行,但是当引发异常时,我如何知道 _foo_test 是否使用参数 TYPE_A、TYPE_B 或 TYPE_C 失败?
也许有更好的方法来构建这些非常相似的测试?
【问题讨论】:
-
在测试中重复是可以的,只要它保持简单易懂。您不想为您的测试编写测试吗?
-
我在一些地方读到,在测试中重复是可以的。但后来这一切都只是 python 代码。上面的例子显然是微不足道的。有时我可能会在一个测试套件中为一个
bar_type进行 5 个不同的系统测试,每个测试可以运行到 10 行。因此,对于 X 个bar_type,现在必须复制和粘贴 X 次 50 行代码。然后我必须手动编辑每个“bar_type”引用。任何时候我添加另一个“bar_type”我现在必须去复制和粘贴数百个测试,这样我就可以覆盖另一个条件。绝对不干。
标签: python django python-2.7 unit-testing testing