0

我想对我的 Web API 控制器进行集成测试。当集成测试开始时,应该处理 Web API 的整个请求/响应管道,因此它是一个真正的集成测试。

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

对于真正处理 Web API 上的自托管或 IIS 托管集成测试的人的一些解释,我真的很高兴(如果测试有差异......)

4

1 回答 1

1

不确定您所说的非内存测试是什么意思,但是对于涉及内存托管 Web API 的集成测试,请求会直接发送到HttpServerASP.NET Web API 管道中运行的第一个组件。这意味着,请求不会命中网络堆栈。因此,您不必担心在特定端口上运行等,而且如果您编写了大量测试,运行所有测试所需的时间不会太大,因为您处理的是内存而不是网络。您应该获得与典型单元测试相当的运行时间。查看 Kiran 的这篇出色的帖子,了解有关内存测试的更多详细信息。内存测试将运行您设置为在管道中运行的所有组件,但需要注意的一件事是格式化程序。如果你发送ObjectContent在请求中,不需要运行媒体格式化程序,因为请求已经是反序列化格式,因此不会发生媒体格式化。

如果您想更接近并愿意在运行时间上受到影响,您可以使用自主机编写测试。这就是非内存测试的意思吗?例如,您可以使用 OWIN 自托管。您可以使用 Katana 托管 API 并托管您的 Web API 并根据您的请求进行访问。当然,这将使用真正的 HttpListener 并且请求确实会遍历网络堆栈,尽管这一切都发生在同一台机器上。测试会相对较慢,但您可能会更接近您的产品运行。

我个人还没有看到任何人使用虚拟主机并进行大量集成测试。从技术上讲,使用并检查响应和断言内容来触发您的请求是可行的,HttpClient但是您无法控制以编程方式安排测试。

我的选择是混搭,也就是尽可能使用内存测试,只在那些需要真正上网的特定情况下才使用基于 Katana 的主机。

于 2014-01-05T08:35:01.053 回答