35

コントローラーに消費するコードがありますHttpContext

public ActionResult Index()
{

   var currentUser=HttpContext.User.Identity.Name;
   ......

}

このようにNUnitを使用してテストを記述しようとしている間

[Test]
public void CanDisplayRequest()
{
    //Act
    var result=  (ViewResult)_requestController.Index();

    //Assert
    Assert.IsInstanceOf<OrderRequest>(resut.Model);
}

見つからなかったため、テストは失敗しますHttpContext

では、どうすれば嘲笑できますかHttpContext.Current.User.Identity.Name

モッキングにMoqを使用しています

4

2 に答える 2

55

以下に示すように、偽のプリンシパルを使用して偽のコンテキストでコントローラーを初期化できます

var fakeHttpContext = new Mock<HttpContextBase>();
var fakeIdentity = new GenericIdentity("User");
var principal = new GenericPrincipal(fakeIdentity, null);

fakeHttpContext.Setup(t => t.User).Returns(principal);
var controllerContext = new Mock<ControllerContext>();
controllerContext.Setup(t => t.HttpContext).Returns(fakeHttpContext.Object);

_requestController = new RequestController();

//Set your controller ControllerContext with fake context
_requestController.ControllerContext = controllerContext.Object;
于 2013-09-25T13:42:21.527 に答える