我见过this question和this one,但我仍然很好奇pyunit是如何为我的用例工作的。
我想为多个输入测试相同的方法。为此,我创建了一个包含多个测试方法的类,以及两个具有不同setUp
方法的子类。
这样的事情:
class Test_Foo(unittest.TestCase):
# abstract class, do not actually add this to the test suite!
def test_01_preserves(self):
"""Foo preserves bazness correctly"""
self.assertTrue(is_preserved(self.foo.baz))
....
...
class Test_Foo_simple(Test_Foo):
"""test Foo for some simple input"""
def setUp(self):
self.input = ""
self.params = {}
self.foo = Foo(self.input, self.params)
class Test_Foo_complex(Test_Foo):
"""test Foo for some complex input"""
def setUp(self):
self.input = "complicated stuff"
self.params = {"bar" : 3}
self.foo = Foo(self.input, self.params)
...
然后将第二个类添加到TestSuite
并使用TextTestRunner
运行。
现在输出将是:
Foo preserves bazness correctly ... ok
...
Foo preserves bazness correctly ... ok
...
没有明显的方法来跟踪哪个测试用例正在运行。
我该如何解决这个问题?
我目前正在做的是为每个子类添加__init__
方法,如下所示:
super(Test_Foo_simple, self).__init__(self, *args, **kwds)
self._testMethodDoc = self._testMethodDoc + "(simple)"
这似乎是一个糟糕的黑客,并不能保证在未来版本的pyunit上工作。我可以使用所需的docstring和子类TextTestRunner
定义另一个局部变量来代替使用它,但这带来了自己的问题。有更好的解决方法吗?