MVCの検証におけるユニットテスト
2023-08-05 21:14:14
質問
MVC 2 Preview 1でDataAnnotation検証を使用している場合、エンティティの検証時にコントローラのアクションが正しいエラーをModelStateに置くことをどのようにテストすればよいでしょうか。
いくつかのコードで説明します。 まず、アクションです。
[HttpPost]
public ActionResult Index(BlogPost b)
{
if(ModelState.IsValid)
{
_blogService.Insert(b);
return(View("Success", b));
}
return View(b);
}
そして、これは合格するはずなのに合格していないユニットテストです(MbUnit & Moqを使用)。
[Test]
public void When_processing_invalid_post_HomeControllerModelState_should_have_at_least_one_error()
{
// arrange
var mockRepository = new Mock<IBlogPostSVC>();
var homeController = new HomeController(mockRepository.Object);
// act
var p = new BlogPost { Title = "test" }; // date and content should be required
homeController.Index(p);
// assert
Assert.IsTrue(!homeController.ModelState.IsValid);
}
この質問に加え、推測ですが は バリデーションをテストすべきなのか、また、このような方法でテストすべきなのか?
どのように解決するのですか?
を渡す代わりに
BlogPost
を渡す代わりに、actions パラメータを
FormCollection
. そして
BlogPost
を自分で作って
UpdateModel(model, formCollection.ToValueProvider());
.
これで
FormCollection
.
[HttpPost]
public ActionResult Index(FormCollection form)
{
var b = new BlogPost();
TryUpdateModel(model, form.ToValueProvider());
if (ModelState.IsValid)
{
_blogService.Insert(b);
return (View("Success", b));
}
return View(b);
}
テストでは、空のままにしたいビューフォームのすべてのフィールドにNULL値を追加することを確認してください。
私は、数行の余分なコードを犠牲にして、この方法で行うことで、ユニットテストが実行時に呼び出されるコードとより近くなり、より価値のあるものになることを発見しました。また、int プロパティにバインドされたコントロールに誰かが "abc" を入力したときに何が起こるかをテストすることもできます。
関連
-
[解決済み] TDDのためのJavaScriptユニットテストツール
-
[解決済み] C# "internal "アクセス修飾子でユニットテストを行う場合
-
[解決済み] ASP.Net MVCのmodelStateからすべてのエラーを取得する方法は?
-
[解決済み] プライベートメソッドのユニットテストはどのように行うのですか?
-
[解決済み] MVCにおけるViewModelとは?
-
[解決済み】ASP.NET MVC 3 RazorでAjax.BeginFormを使用する。
-
[解決済み】ViewModelのベストプラクティス
-
[解決済み] ソートロジックは、モデル、ビュー、コントローラのいずれに配置するのがよいのでしょうか?[クローズド]
-
[解決済み] エリア間のRedirectToAction?
-
[解決済み] ASP.NET MVCとIIS7で生のHTTPリクエスト/レスポンスをログに記録する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】同じキーのアイテムがすでに追加されています。
-
[解決済み] glyphicons-halflings-regular.woff2 not foundに関するエラーを削除する方法
-
[解決済み] ASP.NET MVCアプリケーションで、デバッグ用の起動ページを設定するにはどうすればよいですか?
-
[解決済み] 既存のASP.NET MVC 4 WebアプリケーションのプロジェクトにWeb APIを追加するにはどうすればよいですか?
-
[解決済み] Html.ActionLinkをリンクではなく、ボタンや画像にする
-
[解決済み】認証や認可に失敗した場合、AuthorizeAttributeがログインページにリダイレクトされるのはなぜですか?
-
[解決済み】MVC 4 Razor ファイルアップロード
-
[解決済み】ASP.NET MVC Html.ValidationSummary(true) でモデルエラーが表示されない。
-
[解決済み] [Solved] ASP.NET MVCで404を適切に処理するには?
-
[解決済み] HTMLヘルパーでURLを生成する