作業中にSVNブランチを作成するエンティティがあるとします。私は結果のブランチを削除するか、テストが失敗した場合は何もしないようにしたい各テストの後tearDownメソッドにパラメータを渡す
class Tester(unittest.TestCase):
def test_valid1_url(self):
url="valid1"
BranchCreator().create_branch(url)
self.assertUrlExists(url) # assume I have this method implemented
def test_valid2_url(self):
url="valid2"
BranchCreator().create_branch(url)
self.assertUrlExists(url) # assume I have this method implemented
def test_invalid_url(self):
url="invalid"
self.assertRaises(ValueError, BranchCreator().create_branch, url)
:機能テストを実行するには、私は複数のほぼ同じメソッドを(私はフレームワークunittestモジュールのpythonを使用しますが、質問は任意のテストフレームワークに関連する)を作成します。理想的には次のようなものを使用します:
@teardown_params(url='valid1')
def test_valid1_url(self):
def tearDown(self, url):
if (url_exists(url)): remove_branch(url)
しかし、tearDownはパラメータを受け入れません。 私はいくつかの非常に汚いソリューションを参照してください。
a)は、テスターにフィールド「used_url」を作成するすべての方法でそれを設定し、ティアダウンに使用します。それが原因で(少なくとも私の環境で動作するはず
def test_valid1_url(self):
self.used_url="valid1"
BranchCreator().create_branch(self.used_url)
self.assertUrlExists(url)
...
def tearDown(self):
if (url_exists(self.used_url)): remove_branch(self.used_url)
を)すべてのテストが順番に実行されるので、競合は発生しません。しかし、このソリューションは、変数の共有によるテストの独立性の原則に違反しています。同時にテストを開始すると、うまく動作しません。
b)はcleanup(self, url)
のような別の方法を使用して、すべての方法
からそれを呼び出す他の方法はありますか?
「tearDown」がテストフレームワークに追加されてはならないと考えている人もいます。あなたの '' b''ソリューションを正しいものにする。私は重複を排除するために、適切な例外処理を使ってパラメータ化されたテストを作成します。 – zhon