如何使用令牌对Web API的POST调用进行单元测试?

9
我有一个 httppost web api 方法。我需要以授权头的形式传递令牌并收集响应。
我正在使用web-api 2。我的post方法返回IHttpActionResult ok(model)。
我已经使用 POSTMAN rest 客户端测试了 web-api ,它可以正常工作。
我遇到了一个问题,无法编写单元测试来测试我的API。
另外,我能否在同一解决方案中拥有 Unit test 项目和 web-api 项目?我尝试将单元测试项目和 web-api 项目设置为启动项目,但单元测试项目只是库,所以这不起作用。
请问有人可以指导我吗?
1个回答

16

首先,通常在同一解决方案中有单元测试项目和API项目。然而,API项目应该是启动项目。然后,您可以使用Visual Studio测试资源管理器或其他等效工具(例如构建服务器)来运行单元测试。

为了测试API控制器,我建议您在单元测试中创建一个Owin测试服务器,并使用它来执行针对您的API的HTTP请求。

    [TestMethod]
    public async Task ApiTest()
    {
        using (var server = TestServer.Create<Startup>())
        {
            var response = await server
                .CreateRequest("/api/action-to-test")
                .AddHeader("Content-type", "application/json")
                .AddHeader("Authorization", "Bearer <insert token here>")
                .GetAsync();

            // Do what you want to with the response from the api. 
            // You can assert status code for example.

        }
    }

然而,您必须使用依赖注入来注入您的模拟/存根。您需要在测试项目中的启动类中配置依赖项注入。

这篇文章更详细地解释了Owin测试服务器和启动类。


测试身份验证,请参考此帖 - https://dev59.com/UGIj5IYBdhLWcg3wx34x#25057928 - Alex Klaus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接