2

Moq コード:

mockControllerContext.SetupGet(x => x.HttpContext.Session["User"]).Returns(new User
{
    Name = "Moto", 
    IsAdmin = true                                                                                        
});
taskController.ControllerContext = mockControllerContext.Object;

MS Fakes を使用して HttpContext.Session をモックするにはどうすればよいですか?

4

2 に答える 2

1

これらの2つの関数をここからクラスで取得しました。

public static class HttpContextFactory
{
    public static void SetFakeAuthenticatedControllerContext(this Controller controller)
    {
        var httpContext = FakeAuthenticatedHttpContext();
        ControllerContext context =
        new ControllerContext(
          new RequestContext(httpContext,
          new RouteData()), controller);
        controller.ControllerContext = context;
    }
    private static HttpContextBase FakeAuthenticatedHttpContext()
    {
        var context = new Mock<HttpContextBase>();
        var request = new Mock<HttpRequestBase>();
        var response = new Mock<HttpResponseBase>();
        var session = new Mock<HttpSessionStateBase>();
        var server = new Mock<HttpServerUtilityBase>();
        var user = new Mock<IPrincipal>();
        var identity = new Mock<IIdentity>();
        context.Setup(ctx => ctx.Request).Returns(request.Object);
        context.Setup(ctx => ctx.Response).Returns(response.Object);
        context.Setup(ctx => ctx.Session).Returns(session.Object);
        context.Setup(ctx => ctx.Server).Returns(server.Object);
        context.Setup(ctx => ctx.User).Returns(user.Object);
        user.Setup(ctx => ctx.Identity).Returns(identity.Object);
        identity.Setup(id => id.IsAuthenticated).Returns(true);
        identity.Setup(id => id.Name).Returns("a.ali174");
        return context.Object;
    }
}

ユニットテストから、私はそれらをそのように呼びました。

 HttpContextFactory.SetFakeAuthenticatedControllerContext(controller);
于 2012-09-21T06:27:08.293 に答える
0

Microsoft Fakes では、シムを使用できます。ただし、これは悪い習慣だと思います。代わりに、サードパーティのライブラリを独自のクラスにラップして、それらから自分を分離する必要があります。次に、そのクラスにインターフェイスを配置し、コード全体でインターフェイスを使用できます。この腐敗防止層により、サードパーティのアセンブリから身を守ることができ、サードパーティのアセンブリが変更されたときの影響が少なくなります。

shim の使用について詳しく知りたい場合は、Microsoft Fakes で作成したこの Pluralsight コースを参照してください。(完全な開示: 私はこのコースで使用料を受け取りますが、スピードを上げるための迅速な方法です)

于 2012-12-05T23:50:21.390 に答える