原文出处: richieyangs 大家是如何对webApi写测试的呢? 接下来我介绍一种webApi的in-memory调用方法,也能够达到对webApi的测试,并且由于是in-memory调用,效率也比较高,非常适写单元测试。本文参考了In memory client, host and integration testing of your Web API service。 一、首先写一个OrderController用来做测试用 C#
二、WebApi的请求过程 webApi的核心是对消息的管道处理,整个核心是有一系列消息处理器(HttpMessageHandler)首尾连接的双向管道,管道头为HttpServer,管道尾为HttpControllerDispatcher,HttpControllerDispatcher负责对controller的激活和action的执行,然后相应的消息逆向流出管道。 所以我们可以利用HttpMessageInvoker将一个请求消息HttpRequestMessage发送到管道中,最后收到的消息HttpResponseMessage就代表一个真实的请求响应。 三、Get请求的测试 C#
四、Post请求的测试 C#
四、重构 可以看到这两个测试大部分的代码是相同的,都是用来发送请求。因此我们提取一个webApiTestBase类,该基类可以提供InvokeGetRequest,InvokePostRequest,InvokePutRequest等方法 C#
有了这个基类,我们写测试只需要重写方法GetBaseAddress(),然后直接调用基类方法并进行断言即可 C#
是不是干净多了。 这种in-memory的测试方案有什么优点和缺点呢? 优点: 缺点:我觉得原文作者说的那些缺点都可以忽略不计。 加入伯乐在线专栏作者。扩大知名度,还能得赞赏!详见《招募专栏作者》
|
|