Ok, j'ai essayé. mais je ne peux pas envelopper ma tête autour de cela.Comment tester l'unité Contrôleur MVC Action qui appelle un service associé au contrôleur
J'ai un contrôleur
public sealed class CourseController : ExtController
{
[HttpPost, PersistState, InRole("")] //TODO [SECURITY] [FIX] UPDATE SECURITY ROLES ]
public ActionResult Create(string[] flags, string name, string code, string description)
{
try
{
var Course = Svc.ProcessOperation("CreateCourse", new
{
Flags = flags.Merge(",")
});
Svc.ProcessOperation("CreateCourseTranslation", new
{
CourseId = Course.EntityID,
LanguageId = JAs.Int32(Svc.Localization.Language.EntityID),
Name = name,
Description = description,
Code = code
});
TempData.PersistStatus("Success");
return View();
}
catch (Exception ex)
{
ModelState.AddModelError("API", ex);
TempData.PersistStatus("Failed");
}
return RedirectToAction("Create");
}
}
Svc est une propriété publique de type service intérieur de la classe abstraite ExtController qui à son tour étend la classe contrôleur
/// <summary>
/// Represents the exteded controller.
/// </summary>
public abstract class ExtController : Controller
{
#region Properties
/// <summary>
/// Gets the service associated with the controller.
/// </summary>
public Service Svc
{
get
{
return HttpContext.Svc();
}
}
#endregion
}
et est ici la Code de test unitaire utilisant NUnit
[Test]
public void Create_HttpPost_Action_Returns_Create_View()
{
// Arrange
var customersController = new CourseController();
// Act
var result = customersController.Create(new[] { "None" }, "courseName", "Code", "description") as ViewResult;
// Assert
Assert.IsNotNull(result, "Should have returned a ViewResult");
result.AssertViewRendered().ForView("Create");
}
T il est problème lorsque la méthode Create est appelée il doit utiliser Svc pour traiter l'opération, donc je suppose que je dois Mock ça! mais je ne peux pas comprendre comment.
devrais-je me moquer du contrôleur! mais je ne peux pas parce que c'est une classe scellée! ou l'ExtController! Je suis perdu et j'ai besoin de conseils.
[FWIW] Ce projet est basé sur Xenta MVC Framework (Open Source) qui a cette architecture Aperçu