2012-04-23 7 views
1

特定のファイルを変換する必要がある、さまざまなオーディオ形式のリストがあります。私が書いた変換関数は、ファイルを変換し、成功の情報、新しく作成したファイルへのパス、または何らかの失敗情報を返すべきです。最初のアサーションが失敗した後、テストのアサーションをすべてテストできますか?

self.AUDIO_FORMATS = ({'format':'wav', 'samplerate':44100, 'bitdepth':16 }, 
         {'format':'aac', 'samplerate':44100, 'bitdepth':16 }, 
         {'format':'ogg', 'samplerate':44100, 'bitdepth':16 }, 
         {'format':'mp3', 'samplerate':44100, 'bitdepth':16 }) 

の変換が失敗の1のための1つの可能な理由は、行方不明のライブラリである、またはいくつかのバグや故障などのライブラリまたはそれの私の実装で、私はのリストを持っているの変換のそれぞれをテストしたいと失敗したテストではどの変換がトラブルの原因になったのか正確にわかっています。すぐに最初の変換が失敗したように、テストを中止、もちろん、これは今

def test_convert_to_formats(self): 

    for options in self.AUDIO_FORMATS: 
     created_file_path, errors = convert_audiofile(self.audiofile,options) 
     self.assertFalse(errors) 
     self.assertTrue(os.path.isfile(created_file_path), 

:これは私が(単純化されたビット)を試みたものです。私はそれぞれの変換に対してテスト関数を書くことができました。これで、追加された各フォーマットの新しいテストを書く必要があります。ここでは、AUDIO_FORMATSタプルに新しい辞書を追加するだけです。

+1

ユニットテストでは、1つの重点的なシナリオだけをテストする必要があります。はい、あなたのケースでは、それは特定の形式に変換しています。ただし、各形式について特定のシナリオがあります。テストでは、特定の形式の変換のみをテストする必要があります。これは、フォーマットごとに1つずつ、複数のテストを記述する必要はありません。書式を通してメソッドループを持つことができ、各書式に対して、特定の書式を渡すテストメソッドを呼び出すことができます。そうすることで、1形式の変換に失敗したテストが他の形式のテストに影響を及ぼさず、アサーションを配列などにハックする必要がないことを確認しています。 – Nope

+0

@Francois:これは私がやろうと思ったものとほぼ同じように聞こえる。私はTestCase内で作業することができませんでした。それをコード化する方法の例を教えてください。 (私はそれに応じて私の質問を更新します) – marue

+0

私は.Netの背景から来ています。私はPythonを知らず、その構文をあなたに伝えることができません。それはまた、テストを実行するためのより構造化された可能な方法を直接試して、コメントを追加しただけです。 .NETでは、テストフレームワークを使用して、テストメソッドを呼び出すたびに渡すパラメータの異なるセットを指定して、テストメソッドの上に属性を追加できます。あなたのような状況でうまくいきます。悲しいことに、私はPythonでその実装をどのように行うのか分かりません。 Pythonが制限されている場合、Ates Goralの解決策が唯一の方法かもしれません。 – Nope

答えて

6

アサートする代わりに、エラーを配列に格納します。反復の最後に、errors配列が空であると主張し、アサーション失敗の理由として配列の内容をダンプする可能性があります。

0

なぜ使用しないでくださいtry ... except ...

errors = [] 

    for option in optionlist: 
    try: 
     assert_and_raise1(option) 
     assert_and_raise2(...) 
    except Exception, e: 
     errors.append("[%s] fail: %s"%(option, e)) 

    for e in errors: 
    print e 
+0

これはAtes Goralが提案したものとほぼ同じです。私がアサーションをしないだけの場合、私は例外をキャッチする必要はありません。だから私がエラーを集めることに決めたら、私はAtesの解決策に固執するでしょう。とにかくありがとう。 – marue

関連する問題