this questionとthis oneを見てきましたが、私のユースケースで pyunit がどのように機能するかについてまだ興味があります。
複数の入力に対して同じメソッドをテストしたい。これを行うために、いくつかのテスト メソッドを持つクラスと、異なるsetUp
メソッドを持つ 2 つのサブクラスを作成しました。
このようなもの:
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)
...
次に、2 番目の 2 つのクラスを a に追加し、それを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
、代わりにそれを使用することもできますが、それには独自の問題があります。これを回避するより良い方法はありますか?