Unit testing 如何使用令牌对post(web api)调用进行单元测试?

Unit testing 如何使用令牌对post(web api)调用进行单元测试?,unit-testing,web-applications,asp.net-web-api,asp.net-web-api2,dotnet-httpclient,Unit Testing,Web Applications,Asp.net Web Api,Asp.net Web Api2,Dotnet Httpclient,我有一个httppostwebapi方法。我需要传入一个令牌作为授权头并收集响应 我正在使用WebAPI2。我的post方法返回IHttpActionResult ok(模型) 我已经使用POSTMAN rest客户端测试了web api,它可以正常工作 我被困在一个点上,在这个点上,我无法编写一个单元测试来测试我的API 另外,我不能在同一个解决方案中使用单元测试项目和webapi项目吗?我尝试将单元测试项目和WebAPI项目设置为启动项目。但单元测试项目只是一个库,所以不起作用 有人能给我介

我有一个httppostwebapi方法。我需要传入一个令牌作为授权头并收集响应

我正在使用WebAPI2。我的post方法返回IHttpActionResult ok(模型)

我已经使用POSTMAN rest客户端测试了web api,它可以正常工作

我被困在一个点上,在这个点上,我无法编写一个单元测试来测试我的API

另外,我不能在同一个解决方案中使用单元测试项目和webapi项目吗?我尝试将单元测试项目和WebAPI项目设置为启动项目。但单元测试项目只是一个库,所以不起作用


有人能给我介绍一下吗?

首先,单元测试项目和Api项目通常位于同一个解决方案中。然而,API项目应该是启动项目。然后使用VisualStudioTestExplorer或其他等效工具(f.x.a构建服务器)运行单元测试

为了测试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.

        }
    }
[TestMethod]
公共异步任务ApiTest()
{
使用(var server=TestServer.Create())
{
var response=wait服务器
.CreateRequest(“/api/要测试的操作”)
.AddHeader(“内容类型”、“应用程序/json”)
.AddHeader(“授权”、“持票人”)
.GetAsync();
//对来自api的响应执行您想要的操作。
//例如,您可以断言状态代码。
}
}
但是,您必须使用依赖项注入来注入模拟/存根。您必须在测试项目的启动类中配置依赖项注入


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

有关测试身份验证的信息,请参阅本文-