[解決済み】Assert.Fail()はバッドプラクティスとみなされるか?
質問
TDDを行う際、Assert.Failをよく使います。私は通常、一度に1つのテストに取り組んでいますが、後で実装したいもののアイデアを得たとき、私はすぐに空のテストを書き、テストメソッドの名前は、一種のTodoリストとして実装したいものを示しています。忘れないように、本文にAssert.Fail()を入れています。
xUnit.Netを試したところ、Assert.Failが実装されていないことがわかりました。もちろん、Assert.IsTrue(false)を使えばいいのですが、これでは私の意図がうまく伝わらないのです。意図的にAssert.Failを実装していないような印象を受けたのですが。これはバッドプラクティスとみなされるのでしょうか?もしそうなら、なぜですか?
マーティン・メレディス それは私のやり方とはちょっと違いますね。私は最初にテストを書き、それを動作させるためのコードを実装します。通常、私は一度に複数のテストを考えます。あるいは、他のことをやっているときに書くべきテストを思いつくこともあります。その時は、覚えておくために空の失敗テストを書きます。テストを書くまでに、私はきちんとテストファーストで作業しています。
ジンメ それは良さそうですね。無視されたテストは失敗しませんが、それでも別のリストに表示されます。試してみなければなりませんね。
マット・ハウエルズ いいアイデアだ。NotImplementedExceptionは、この場合assert.Fail()よりも意図を伝えることができます。
ミッチ・ウィート それを探していたんです。私が悪用する別の方法で悪用されるのを防ぐために、省かれたようです。
解決方法は?
このシナリオでは、Assert.Fail を呼び出すのではなく、次のようにしています (C# / NUnit の場合)。
[Test]
public void MyClassDoesSomething()
{
throw new NotImplementedException();
}
Assert.Fail よりも明示的です。
Assert.Fail()よりももっと明示的なアサーションを使用することが望ましいというのが一般的な意見のようです。しかし、ほとんどのフレームワークは、より良い代替手段を提供しないため、これを含めざるを得ません。例えば、NUnit(とその他)は、あるコードが特定のクラスの例外を投げることをテストするためにExpectedExceptionAttributeを提供します。しかし、例外のプロパティが特定の値に設定されていることをテストするために、これを使うことはできない。代わりに、Assert.Fail を使う必要があります。
[Test]
public void ThrowsExceptionCorrectly()
{
const string BAD_INPUT = "bad input";
try
{
new MyClass().DoSomething(BAD_INPUT);
Assert.Fail("No exception was thrown");
}
catch (MyCustomException ex)
{
Assert.AreEqual(BAD_INPUT, ex.InputString);
}
}
xUnit.NetのAssert.Throwsメソッドを使えば、Assert.Failメソッドを使わなくても、この処理を簡単に行うことができます。xUnit.Net では、Assert.Fail() メソッドを使わないことで、開発者がより明確な代替手段を見つけ、使用することを奨励しており、必要に応じて新しいアサーションの作成もサポートしています。
関連
-
[解決済み] jest.fn()の機能と使い方を教えてください。
-
[解決済み] フェイク、モッキング、スタビングの違いとは?
-
[解決済み] Gradleを使用して1つのユニットテストクラスのみを実行する方法
-
[解決済み】Arduinoのコードをユニットテストするにはどうしたらいいですか?
-
[解決済み】Unit Testsの一般的な命名規則にはどのようなものがありますか?[クローズド]。
-
[解決済み] モックオブジェクトは何のためにあるのか?
-
[解決済み] JUnitを使ったユニットテストのためのIntelliJ IDEAの設定
-
[解決済み] Visual Studio 2015または2017でユニットテストが検出されない
-
[解決済み] 抽象クラスのテスト
-
[解決済み] GTestとCMakeを使った作業の始め方
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Assert.Fail()はバッドプラクティスとみなされるか?
-
[解決済み] ユニットテストの命名のベストプラクティス [終了しました]。
-
[解決済み] ユニットテストは努力に値するか?[クローズド]
-
[解決済み] JUnitを使ったユニットテストのためのIntelliJ IDEAの設定
-
[解決済み] モッキングフレームワークにおけるモッキングとスパイの比較
-
[解決済み] 抽象クラスのテスト
-
[解決済み】ユニットテストについて語るときの「DAMP not DRY」の意味とは?
-
[解決済み] ファイルシステムに依存するコードの単体テスト
-
[解決済み] 例:無効なutf8文字列?
-
[解決済み] Enzyme - How to access and set <input> value?