2

test/unit および minitest では、アサーションを含まないテストに失敗する可能性はありますか? または、モンキー パッチが必要になりますか (たとえば、各テストの実行後にアサーション カウントが増加したかどうかを確認します)?

背景:アサーションなしで単体テストを書くべきではありません。少なくとも、assert_nothing_raisedスモーク テストを行っている場合は、スモーク テストを行っていることを示すために使用する必要があります。

通常、最初に失敗するテストを作成しますが、いくつかの回帰テストを作成しています。あるいは、間違った期待値を指定して、テストが期待値と実際の値を比較しているかどうかを確認することもできます。

4

3 に答える 3

1

単体テストが実際に何かを検証することを確実にするために、突然変異テストと呼ばれる手法が使用されます。

Ruby については、Mutantを参照してください。

于 2012-06-20T12:07:06.773 に答える
0

アサートなしでテストを強制的に失敗させることが本当に役立つとは本当に思いません。テストで assert を使用すること自体は目的ではありません。目的は、有用なテストを作成することです

欠落しているアサートは、テストが役に立たない可能性があることを示しているだけです。興味深い質問は次のとおりです。何かが壊れるとテストは失敗しますか? . そうでなければ、明らかに無駄です。

コードがクラッシュしないことだけをテストしている場合、そのassert_nothing_raised周りは単なるコメントです。しかし、「爆発なし」のテストは、テスト自体が弱いことを示している可能性があります。ほとんどの場合、コードに関する有用な情報は得られません (「クラッシュしない! = 正しい」ため)。では、そもそもなぜテストを作成したのでしょうか? さらに、間違った結果を返すメソッドよりも、適切に展開するメソッドを好みます。

私は、最良の回帰テストは現場から得られることを発見しました: アプリを叩いて (またはテスターに​​やってもらい)、見つけた問題ごとに、失敗するテストを書きます。修正して、テストに合格してください。

それ以外の場合は、クラッシュがないことではなく、動作をテストします。「空の」テストがある場合 (つまり、まだテスト コードを書いていないことを意味します)、私は通常、思い出させるために内部に #flunk を入れます。

于 2010-06-11T16:59:41.163 に答える
0

PK のリンクも指摘しているように、アサーション自体の存在は、単体テストが意味があり、正しいことを意味するわけではありません。慎重な思考と認識に自動的に取って代わるものはないと私は信じています。

最初にテストが失敗することを確認することは良い習慣であり、習慣にする必要があります。

あなたが言及したこととは別に、テストが実際に実行されて失敗することを確認するために、新しいテストのアサートに間違った値を設定することがよくあります。(その後、もちろん修正します :-) これは、製品コードを編集するよりも目立たないものです。

于 2010-06-11T09:12:25.393 に答える