2017-09-05 17 views
0

異なる入力(デフォルトであることいくつか)で、単一の機能をテストするとき、行うには良い習慣です:Pythonユニットテスト:異なる入力を持つ単一の関数をテストする複数のテスト関数?

def test_init(self): 
    page = HTMLGen("test", "path\\goes\\here") 
    self.assertEqual(page.path, "path\\goes\\here\\index.html") 

    page_2 = HTMLGen("test", "path\\goes\\here", "cool_page") 
    self.assertEqual(page_2.path, "path\\goes\\here\\cool_page.html") 

または

def test_init(self): 
    page = HTMLGen("test", "path\\goes\\here") 
    self.assertEqual(page.path, "path\\goes\\here\\index.html") 

def test_init_with_filename(self): 
    page = HTMLGen("test", "path\\goes\\here", "cool_page") 
    self.assertEqual(page.path, "path\\goes\\here\\cool_page.html") 
+1

2つ目のアプローチはもっと冗長で、2つのシナリオの目的もちょっと違っています。最初のケースはブランクのinitをテストし、2番目のテストは引数の入力をテストします。 – Szabolcs

+1

2番目のアプローチは間違いありません。あなたは2つの異なるシナリオをテストしているので、2番目のアプローチは間違いなくあなたが使うべきだと思うものです。より明示的で、行動をよりよく文書化するのに役立ちます。しかし、1つのコメント。 'test_init'もテストする動作を反映するように名前が変更されていることを確認してください。 – idjaw

+0

https://en.wikipedia.org/wiki/Data-driven_testing https://github.com/wolever/parameterized – dm03514

答えて

1

最初のテストが失敗した場合ので、第二のアプローチが優れていますもう1つはまだ実行するチャンスがあります。これにより、バグの発生場所と発生原因を正確に把握するための情報を得ることができます。

さらに、テストの間にクリーンアップ/ティアダウンコードが実行され、テストが独立していることを保証するのに役立ちます。

+0

この状況でセットアップやティアダウンを使用したくないですか? setUpでself.page = HTMLGen( "test"、 "path \\ goes \\ here")を割り当てると、この問題は2番目の関数の別の変数を再定義するだけです。page = HTMLGen( "test"、 "path \\ goes \\ here"、 "cool_page")とにかく? – BUInvent

関連する問題