0

Python での Qunit のアサーションに対する同様のアプローチを見つけようとしています。Qunit でアサーションを使用する場合、メッセージ パラメーターは非常にわかりやすい方法で使用されます。

test( "test", function() {
  ok( fn([])==None, "Function should return 0 if no users" );
  ok( fn(["Test User"])==1, "Function should return 1 is users supplied" );
});

一方、Python の unittest モジュールは message パラメータを使用しますが、これはやや否定的なコンテキストです。これらは、アサーションが失敗した場合にのみ表示されます。

class TestSequenceFunctions(unittest.TestCase):
    def test_choice(self):
        seq = range(10)
        element = random.choice(seq)
        self.assertTrue(element in seq, msg="Element not found in sequence")

Qunit の最終結果は、仕様ドキュメントと比較できるより明確なトランスクリプトが存在することです。

Python では、おそらく次のように書くことで同様のアプローチが実現されることを認識しています。

def test_choice_ensure_element_exists_in_sequence(self):

しかし、それは同じではありません。出力は適切な方法で表示されず、テスト ライフサイクルは使用するラベルごとにセットアップとティアダウンを実行しますが、これは必ずしも必要なものではありません。

このアプローチを取るライブラリが存在する可能性があるため、この問題はすでに解決されている可能性があります。ただし、python unittest ライブラリも pytest もこの方法では機能しないようです。

4

1 に答える 1

0

あなたの問題は、ユニットテストライブラリがまだ十分にわかっていないということかもしれません。私は書くことができると思います

self.assertIn('s', (1,3,4))

非常に短く、表現力豊かで読みやすいこと。

また、テストケースで正しいアサーション メソッドを使用すれば、独自のメッセージを追加する必要はほとんどありません。assertInそれ自体で完全に合理的な出力があります。

AssertionError: 's' not found in (1, 3, 4)

そのため、大量のコメント/メッセージ コードを書くのではなく。私は、役立つデフォルト メッセージと組み合わせた適切な名前のアサーションに依存しています。適切な名前のアサーションと役立つエラー メッセージがまだ提供されていない場合は、テスト ケースを拡張して独自のケースを追加します。

self.assert_user_is_administrator(user)

非常に読みやすく、1 か所だけで提供したのに失敗した場合は、適切なメッセージが表示されます。

于 2013-05-30T12:54:30.350 に答える