code_junkie

How do I Unit Test Actions without Mocking that use UpdateModel?

Nov 12th, 2011
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.50 KB | None | 0 0
  1. public class Country {
  2. public Int32 ID { get; set; }
  3. public String Name { get; set; }
  4. public String Iso3166 { get; set; }
  5. }
  6.  
  7. [AcceptVerbs(HttpVerbs.Post)]
  8. public ActionResult Edit(Int32 id, FormCollection form)
  9. {
  10. using ( ModelBindingDataContext db = new ModelBindingDataContext() ) {
  11. Country country = db.Countries.Where(c => c.CountryID == id).SingleOrDefault();
  12.  
  13. try {
  14. UpdateModel(country, form);
  15.  
  16. db.SubmitChanges();
  17.  
  18. return RedirectToAction("Index");
  19. }
  20. catch {
  21. return View(country);
  22. }
  23. }
  24. }
  25.  
  26. [TestMethod]
  27. public void Edit()
  28. {
  29. CountryController controller = new CountryController();
  30. FormCollection form = new FormCollection();
  31. form.Add("Name", "Canada");
  32. form.Add("Iso3166", "CA");
  33.  
  34. var result = controller.Edit(2 /*Canada*/, form) as RedirectToRouteResult;
  35.  
  36. Assert.IsNotNull(result, "Expected to be redirected on successful POST.");
  37. Assert.AreEqual("Show", result.RouteName, "Expected to redirect to the View action.");
  38. }
  39.  
  40. var routeData = new RouteData();
  41. var httpContext = MockRepository.GenerateStub<HttpContextBase>();
  42. FormCollection formParameters = new FormCollection();
  43.  
  44. EventController controller = new EventController();
  45. ControllerContext controllerContext =
  46. MockRepository.GenerateStub<ControllerContext>( httpContext,
  47. routeData,
  48. controller );
  49. controller.ControllerContext = controllerContext;
  50.  
  51. ViewResult result = controller.Create( formParameters ) as ViewResult;
  52.  
  53. Assert.AreEqual( "Event", result.Values["controller"] );
  54. Assert.AreEqual( "Show", result.Values["action"] );
  55. Assert.AreEqual( 0, result.Values["id"] );
  56.  
  57. protected internal bool TryUpdateModel<TModel>( ... ) where TModel : class
  58. {
  59.  
  60. ....
  61.  
  62. ModelBindingContext bindingContext =
  63. new ModelBindingContext( ControllerContext,
  64. valueProvider,
  65. typeof(TModel),
  66. prefix,
  67. () => model,
  68. ModelState,
  69. propertyFilter );
  70.  
  71. ...
  72. }
  73.  
  74. CountryController controller = new CountryController();
  75. controller.ControllerContext = new ControllerContext();
  76.  
  77. public class CountryEdit {
  78. public String Name { get; set; }
  79. public String Iso3166 { get; set; }
  80. }
  81.  
  82. public ActionResult Edit(Int32 id, CountryEdit input)
  83. {
  84. var Country = input.ToDb();
  85. // Continue your code
  86. }
Add Comment
Please, Sign In to add comment