使用Web API进行集成测试 - 非内存测试或内存测试 -

时间:2014-01-04 21:55:30

标签: asp.net-web-api integration-testing asp.net-web-api2

我想在我的Web API控制器上进行集成测试。 当集成测试开始时,应该处理Web API的整个请求/响应管道,以便进行真正的集成测试。

我已经阅读了一些关于非InMemory测试或InMemory测试的博客。我需要知道有什么区别,这些方法中的哪些符合我的上述标准?

我真的很高兴那些真正处理Web API集成测试以进行自托管或IIS托管的人的解释(如果测试中存在差异......)

1 个答案:

答案 0 :(得分:1)

不确定非内存测试是什么意思,但是通过涉及内存中托管Web API的集成测试,请求会直接发送到HttpServer,这基本上是第一个运行的组件ASP.NET Web API管道。这意味着,请求不会到达网络堆栈。因此,您不必担心在特定端口等上运行,并且如果您编写了大量测试,那么运行所有测试所需的时间也不会太大,因为您处理的是内存而不是网络。您应该获得与典型单元测试相当的运行时间。从Kiran看这个优秀的post,了解有关内存中测试的更多详细信息。内存中测试将运行您设置的所有组件以在管道中运行,但有一点需要注意的是格式化程序。如果您在请求中发送ObjectContent,则无需运行媒体格式化程序,因为请求已经是反序列化格式,因此不会发生媒体格式化。

如果您想要更接近并且愿意在运行时间上受到打击,您可以使用自托管编写测试。这是非内存测试的意思吗?例如,您可以使用OWIN自托管。您可以使用Katana托管API并托管您的Web API,并根据您的请求点击它。当然,这将使用真正的HttpListener,并且请求会遍历网络堆栈,尽管它们都发生在同一台机器上。测试会比较慢,但你可能会更接近你的产品。

我个人还没有看到有人使用网络托管和进行大量的集成测试。从技术上讲,可以使用HttpClient发出请求并检查响应并声明内容,但是您无法以编程方式安排测试。

我的选择是混合和匹配,即尽可能使用内存中的测试,并仅将基于Katana的主机用于我需要真正进入网络的特定情况。