私はsitecoreの開発者で、私たちの "HomeBottomContentController"のIndex()アクションメソッドの下で、正確にをテストするサンプルのsitecoreヘリックスユニットテストプロジェクトを作成したい"コントローラ、依存性注入なしでコンストラクタに。コメントアウトされたコードはまさに私がやりたくないものです。SitecoreContext依存性注入を使わないでGlassControllerアクションをテストする方法
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);
}
*/
}
ここで私のユニットテストクラスには何がありますか?
[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");
}
}
どのように私は依存性の注入を可能にHomeBottomContentControllerクラスにコードを追加することなく、私のコントローラの正確な指数()メソッドをテストすることができます。繰り返しますが、私は私がやりたくないんまさに何をコメントアウトしています上記のコメントアウトされたコードのようなコンストラクタに移動しますか? HomeBottomContentController()にコードを追加する必要はありません。
@Aleksey Shevchenko私があなたのソリューションを試してみたら、モデルをiSitecoreContextに正確に接続し、それをcontrollerUnderTest.FakeContextに割り当てるにはどうすればいいですか?あなたがしたくない場合は
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;
ありがとうございました!ここで私が与えるとエラーこれ、持っているものですが、どのように私はiSitecoreContext にモデルをフックアップして設定できるようFakeContext?: VARモデル=新しいHome_Control() {Top_Content =「いくつかのダミーのテストホームトップコンテンツ」として}; var iSitecoreContext = new Mock(); iSitecoreContext.Setup(_ => _.GetCurrentItem (false、false))。(モデル)を返します。 FakeHomeTopContentController controllerUnderTest =新しいFakeHomeTopContentController(); controllerUnderTest.FakeContext =(Glass.Mapper.Sc.SitecoreContext)iSitecoreContext; –
user3034243
@ user3034243最後の行を次のように変更してください。 controllerUnderTest.FakeContext =(Glass.Mapper.Sc.SitecoreContext)(iSitecoreContext.Object); –