[解決済み】Assert.Throwsを使って、例外の型をアサーションするには?
2022-04-01 19:34:34
質問
を使用するにはどうすればよいのでしょうか?
Assert.Throws
を使用して、例外の型と実際のメッセージの文言をアサートできますか?
このようなものです。
Assert.Throws<Exception>(
()=>user.MakeUserActive()).WithMessage("Actual exception message")
私がテストしているメソッドは、異なるメッセージを持つ同じタイプの複数のメッセージを投げるので、コンテキストに応じて正しいメッセージが投げられることをテストする方法が必要です。
どのように解決するのですか?
Assert.Throws
はスローされた例外を返し、その例外に対してアサートすることができます。
var ex = Assert.Throws<Exception>(() => user.MakeUserActive());
Assert.That(ex.Message, Is.EqualTo("Actual exception message"));
そのため、例外が発生しなかったり、間違った型の例外が発生した場合、最初の
Assert.Throws
のアサーションは失敗します。しかし、正しい型の例外がスローされた場合は、変数に保存しておいた実際の例外に対してアサーションを行うことができます。
このパターンを使用すると、例外メッセージ以外のものに対してもアサーションを行うことができます。
ArgumentException
と派生して、パラメータ名が正しいかどうかをアサーションすることができます。
var ex = Assert.Throws<ArgumentNullException>(() => foo.Bar(null));
Assert.That(ex.ParamName, Is.EqualTo("bar"));
これらのアサートを行うために、fluent API を使用することもできます。
Assert.That(() => foo.Bar(null),
Throws.Exception
.TypeOf<ArgumentNullException>()
.With.Property("ParamName")
.EqualTo("bar"));
または、その代わりに
Assert.That(
Assert.Throws<ArgumentNullException>(() =>
foo.Bar(null)
.ParamName,
Is.EqualTo("bar"));
例外メッセージをアサーションするときのちょっとしたコツは、テストメソッドを
SetCultureAttribute
を使用して、スローされたメッセージが期待されるカルチャを使用していることを確認します。これは、ローカライズを可能にするために、例外メッセージをリソースとして保存する場合に、重要になります。
関連
-
[解決済み] JUnit 4のテストで、ある例外が投げられたことをどのように断言しますか?
-
[解決済み] DateTime型の誕生日から年齢を計算するにはどうしたらいいですか?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] Pythonの "assert "はどのように使うのですか?
-
[解決済み] Pythonで例外を表示するには?
-
[解決済み] 例外がスローされたことを確認するためにAssertを使用するにはどうすればよいですか?
-
[解決済み] コードが含まれるアセンブリのパスを取得するにはどうすればよいですか?
-
[解決済み] Javaにおける例外処理によるパフォーマンスへの影響とは?
-
[解決済み] voidメソッドが例外を投げるかどうかをMockitoがテストする
-
[解決済み] JUnit Testアノテーションを使用して例外メッセージをアサートするにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。
-
[解決済み】WebResource.axdとは何ですか?