我想在我的Web API控制器上进行集成测试。 当集成测试开始时,应该处理Web API的整个请求/响应管道,以便进行真正的集成测试。
我已经阅读了一些关于非InMemory测试或InMemory测试的博客。我需要知道有什么区别,这些方法中的哪些符合我的上述标准?
我真的很高兴那些真正处理Web API集成测试以进行自托管或IIS托管的人的解释(如果测试中存在差异......)
答案 0 :(得分:1)
不确定非内存测试是什么意思,但是通过涉及内存中托管Web API的集成测试,请求会直接发送到HttpServer
,这基本上是第一个运行的组件ASP.NET Web API管道。这意味着,请求不会到达网络堆栈。因此,您不必担心在特定端口等上运行,并且如果您编写了大量测试,那么运行所有测试所需的时间也不会太大,因为您处理的是内存而不是网络。您应该获得与典型单元测试相当的运行时间。从Kiran看这个优秀的post,了解有关内存中测试的更多详细信息。内存中测试将运行您设置的所有组件以在管道中运行,但有一点需要注意的是格式化程序。如果您在请求中发送ObjectContent
,则无需运行媒体格式化程序,因为请求已经是反序列化格式,因此不会发生媒体格式化。
如果您想要更接近并且愿意在运行时间上受到打击,您可以使用自托管编写测试。这是非内存测试的意思吗?例如,您可以使用OWIN自托管。您可以使用Katana托管API并托管您的Web API,并根据您的请求点击它。当然,这将使用真正的HttpListener,并且请求会遍历网络堆栈,尽管它们都发生在同一台机器上。测试会比较慢,但你可能会更接近你的产品。
我个人还没有看到有人使用网络托管和进行大量的集成测试。从技术上讲,可以使用HttpClient
发出请求并检查响应并声明内容,但是您无法以编程方式安排测试。
我的选择是混合和匹配,即尽可能使用内存中的测试,并仅将基于Katana的主机用于我需要真正进入网络的特定情况。