個人的には、 MVCContrib TestHelperを使用して、コントローラーのアクションを単体テストします。それは物事をとても楽しく簡単にします。
したがって、次のコントローラーを想定している場合(免責事項:実際のアプリケーションでは絶対にこのようなものを記述しないでください。これは単なる例です。実際のアプリケーションでは、コントローラーのアクションはからRequest.Form
のものをフェッチしてはならず、強く型付けされたアクションパラメーターを使用してそのままにしておく必要があります。デフォルトのモデルバインダーは解析などを行います...):
public class MyViewModel
{
public string SomeProperty { get; set; }
}
public class HomeController : Controller
{
public ActionResult Index()
{
var json = Request.Form[0];
var model = new JavaScriptSerializer().Deserialize<MyViewModel>(json);
return View(model);
}
}
次のようにテストできます。
// arrange
var builder = new TestControllerBuilder();
var sut = new HomeController();
builder.InitializeController(sut);
builder.Form.Add("foo", "{ someProperty: 'some value' }");
// act
var actual = sut.Index();
// assert
actual
.AssertViewRendered()
.WithViewData<MyViewModel>()
.SomeProperty
.ShouldEqual("some value", "");