Лично я использую 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", "");