需要更好地了解FakeHttpContext

时间:2012-05-03 15:51:22

标签: c# asp.net-mvc tdd moq

我一直在审核hanselman文章,我想深入了解以下代码的工作原理。它看起来像泛型和扩展方法?我应该熟悉哪些其他主题才能真正理解以下代码。什么类型的主题(如泛型,扩展方法???)我需要知道,以了解文章中提到的整个代码库。感谢

   public static HttpContextBase FakeHttpContext()
    {
        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>();

        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);

        return context.Object;
    }

2 个答案:

答案 0 :(得分:2)

该文章中有很多好东西,但很难知道如何回答你的问题。如你所说,genericsextension methodslambda expressions的使用,在幕后肯定会有一些reflection在该模拟库中进行(moq )当你开始编写测试时,你肯定会在某些时候遇到linq扩展。所以这一切都值得一读。

这篇文章最后都是关于单元测试的,所以理解单元测试是什么,为什么它是好的等等是有用的 - Pragmatic Unit Testing是一本很好的书,作为该主题的介绍。然后是整个test driven development方法,在那里你首先编写测试并在你继续修复它们,这样你也可以阅读它(虽然我会说尝试一下然后看看你是如何进行的)。 / p>

所以,尝试一下,使用它,享受一些乐趣,然后随时随地了解你需要知道的事情。

答案 1 :(得分:0)

它还使用lambda表达式。

如果你不知道,他正在使用一个名为Moq的模拟库,所以你也应该去homepage 并阅读更多相关信息。