【问题标题】:Does System.Web.HttpServer perform well for ASP.Net WebAPI unit testing?System.Web.Http Server 是否适用于 ASP.Net Web API 单元测试?
【发布时间】:2012-11-26 14:41:30
【问题描述】:

我一直在研究对 ASP.Net WebAPI 项目进行单元测试。显然,我可以根据返回的数据轻松测试控制器 Get 方法,但是我正在测试诸如标头之类的东西。

我以前使用过 NancyFX,它提供了一个非常干净的测试功能,即使没有设置客户端/服务器,也可以返回正确的 HTTP 响应。

我在 WebAPI 中看到的替代方法是使用 HttpServer 和 HttpConfiguration 在内存中运行服务器。

如果我这样做,我想知道是否有人知道它的性能。如果它不是那么好,那么不幸的是它变成了一个集成测试。

简单场景,我想测试响应头内容类型。如果没有内存配置,我不确定您如何在 WebAPI 中进行测试

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-web-api


    【解决方案1】:

    我在 1 秒内运行了 80 次测试。我认为性能是足够的。

    注意:如果您没有将 api 测试托管在与控制器本身相同的项目中,您将需要覆盖控制器的创建。我使用 StructureMap 依赖解析器执行此操作,该解析器还实现了IHttpControllerActivatorinterface,因此控制器从容器而不是默认激活器中解析。

    【讨论】:

    • 我在看类似 strathweb.com/2012/06/… 的东西似乎不需要 IHttpControllerActivator ???
    • 那篇文章略有不同。如果您想测试请求/响应但不关心实际的控制器操作,那么它会起作用。如果您想测试 apicontroller 操作,那么测试需要托管在 api 项目本身中,或者您需要覆盖控制器的创建方式。
    • 你不能用这样的东西吗? gist.github.com/4148674。也许我没有正确理解你。有演示代码吗?
    • 这取决于你想测试什么。我假设您想通过调用 url 来测试管道。在这种情况下,您需要设置主机的内存环境。如果这不是您所追求的,那么只需在没有托管环境的情况下围绕组件编写测试并直接调用控制器操作。如果你能提供你已有的代码,那将有助于本次讨论。
    • 我明白你现在谈论的关于 IHttpControllerActivator 的内容,谢谢。我想我将不得不为内存服务器场景这样做。在获得对读取标题等的响应方面,我认为除非有其他方法,否则我必须使用内存?如果您使用内存并每秒执行 80 个请求,那么我认为这足以使其成为单元测试而不是集成
    猜你喜欢
    • 2012-03-18
    • 1970-01-01
    • 2015-11-09
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多