SitecoreContext dépendance Je suis un développeur de Sitecore, et je veux créer un projet de test unitaire d'hélice Sitecore échantillon pour tester la méthode d'action exacte ci-dessous Index() de notre « HomeBottomContentController "contrôleur, sans aucune injection de dépendance dans un constructeur. Notez que le code commenté est exactement ce que je ne veux PAS faire.Comment Unité de test d'une action GlassController sans injection
public class HomeBottomContentController : GlassController
{
// I want to test the EXACT method below
public override ActionResult Index()
{
var context = new SitecoreContext();
var model = context.GetCurrentItem<Home_Control>();
return View("~/Views/HomeBottomContent/HomeBottomContent.cshtml", model);
}
/*
// I do NOT want to have any of the below code for injecting ISitecoreContext into a constructor and testing the IndexTest() below it.
private readonly ISitecoreContext _iSitecoreContext;
public HomeBottomContentController(ISitecoreContext iSitecoreContext)
{
_iSitecoreContext = iSitecoreContext;
}
public HomeBottomContentController()
{ }
public ActionResult IndexTest()
{
var model = _iSitecoreContext.GetCurrentItem<Home_Control>();
return View("~/Views/HomeBottomContent/HomeBottomContent.cshtml", model);
}
*/
}
Voici ce que j'ai dans ma classe de tests unitaires. Encore une fois, ce que je l'ai commenté exactement ce que je ne veux faire: Méthode
[TestClass]
public class MvcUnitTests
{
[TestMethod]
public void Test_HomeBottomContentController_With_ISitecoreContext()
{
/*
// I don't want to do below...
var model = new Home_Control()
{ Bottom_Content = "XYZ" };
var iSitecoreContext = new Mock<Glass.Mapper.Sc.ISitecoreContext>();
iSitecoreContext.Setup(_ => _.GetCurrentItem<Home_Control>(false, false)).Returns(model);
HomeBottomContentController controllerUnderTest = new HomeBottomContentController(iSitecoreContext.Object);
var result = controllerUnderTest.IndexTest() as ViewResult;
*/
//I want to test using the exact constructor below and calling that exact Index() method.
HomeBottomContentController controllerUnderTest = new HomeBottomContentController();
var result = controllerUnderTest.Index() as ViewResult;
Assert.IsNotNull(result);
Assert.IsNotNull(result.Model);
//Assert.AreEqual(((Home_Control)result.Model).Bottom_Content, "XYZ");
}
}
Comment puis-je tester Index exacte de mon contrôleur() sans avoir à ajouter du code à la classe HomeBottomContentController qui permet l'injection de dépendance dans un constructeur (comme le code commenté ci-dessus)? Je ne veux pas avoir à ajouter du code à HomeBottomContentController().
@Aleksey Shevchenko Si j'essaie votre solution, comment puis-je connecter le modèle à iSitecoreContext, puis l'assigner à controllerUnderTest.FakeContext? Mon code ci-dessous lance erreur de compilation (Vous ne pouvez pas convertir Mock de Glass.Mapper.Sc.ISitecoreContext à Glass.Mapper.Sc.ISitecoreContext, comment accomplissons-nous que):
var model = new Home_Control()
{ Top_Content = "Some Dummy Test Home Top Content" };
var iSitecoreContext = new Mock<Glass.Mapper.Sc.ISitecoreContext>();
//var iSitecoreContext = new Glass.Mapper.Sc.SitecoreContext();
iSitecoreContext.Setup(_ => _.GetCurrentItem<Home_Control>(false, false)).Returns(model);
FakeHomeTopContentController controllerUnderTest = new FakeHomeTopContentController();
controllerUnderTest.FakeContext = (Glass.Mapper.Sc.SitecoreContext)iSitecoreContext;
merci! Voici ce que j'ai, ce qui donne et l'erreur, comment puis-je brancher le modèle à l'iSitecoreContext et définir que le FakeContext ?: var model = new Home_Control() {Top_Content = "Certains Test Accueil Dummy Top Content" } var iSitecoreContext = nouvelle maquette(); iSitecoreContext.Setup (_ => _.GetCurrentItem (false, false)). Returns (model); FakeHomeTopContentController controllerUnderTest = new FakeHomeTopContentController(); controllerUnderTest.FakeContext = (Glass.Mapper.Sc.SitecoreContext) iSitecoreContext; –
user3034243
@ user3034243 Essayez de modifier la dernière ligne à cette vue: controllerUnderTest.FakeContext = (Glass.Mapper.Sc.SitecoreContext) (iSitecoreContext.Object); –