¿Cómo puedo unir las acciones de prueba sin burlar que usan UpdateModel?

He estado trabajando a través de la excelente publicación de Scott Guthrie enASP.NET MVC Beta 1. En él muestra las mejoras realizadas al método UpdateModel y cómo mejoran las pruebas unitarias. He recreado un proyecto similar, sin embargo, cada vez que ejecuto un UnitTest que contiene una llamada a UpdateModel, recibo una excepción ArgumentNullException que nombra el parámetro controllerContext.

Aquí están los bits relevantes, comenzando con mi modelo:

public class Country {
  public Int32 ID { get; set; }
  public String Name { get; set; }
  public String Iso3166 { get; set; }
}

La acción del controlador:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Int32 id, FormCollection form)
{
  using ( ModelBindingDataContext db = new ModelBindingDataContext() ) {
    Country country = db.Countries.Where(c => c.CountryID == id).SingleOrDefault();

    try {
      UpdateModel(country, form);

      db.SubmitChanges();

      return RedirectToAction("Index");
    }
    catch {
      return View(country);
    }
  }
}

Y finalmente mi prueba de unidad que está fallando:

[TestMethod]
public void Edit()
{
  CountryController controller = new CountryController();
  FormCollection form = new FormCollection();
  form.Add("Name", "Canada");
  form.Add("Iso3166", "CA");

  var result = controller.Edit(2 /*Canada*/, form) as RedirectToRouteResult;

  Assert.IsNotNull(result, "Expected to be redirected on successful POST.");
  Assert.AreEqual("Show", result.RouteName, "Expected to redirect to the View action.");
}

ArgumentNullException es lanzado por la llamada aUpdateModel con el mensaje "El valor no puede ser nulo. Nombre del parámetro: controllerContext". Estoy suponiendo que en algún lugar elUpdateModel requiere elSystem.Web.Mvc.ControllerContext que no está presente durante la ejecución de la prueba.

También estoy asumiendo que estoy haciendo algo mal en alguna parte y solo necesito apuntar en la dirección correcta.

¡Ayuda por favor!

Respuestas a la pregunta(3)

Su respuesta a la pregunta