我是靠谱客的博主 从容乐曲,最近开发中收集的这篇文章主要介绍使用 xUnit 编写 ASP.NET Core WebAPI单元测试,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文使用xUnit对ASP.NET Core WebAPI做单元测试,使用HttpClient的同步和异步请求,下面详细介绍xUnit的使用过程:

一、创建示例项目

模板为我们自动创建了一个ValuesController控制器,保留里面的一个Get请求和Post请求方法,代码如下:

    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        // GET api/values/5
        [HttpGet("{id}")]
        public ActionResult<string> Get(int id)
        {
            return $"value:{id}";
        }

        // POST api/values
        [HttpPost]
        public ActionResult<string> Post(dynamic obj)
        {
            return $"姓名:{obj.Name},年龄:{obj.Age}";
        }
    }

使用.NET Core创建一个xUnit单元测试项目,如图:

项目的模板页已经为我们添加好了xUnit的引用,不需要我们手动去NuGet导入了,现在从NuGet中添加Microsoft.AspNetCore.App和Microsoft.AspNetCore.TestHost,xUnit项目并添加WebAPI的项目引用,如下图所示:

二、编写单元用例

 写单元测试一般有三个步骤:Arrange,Act 和 Assert。

  • Arrange 是准备阶段,这个阶段是准备工作,比如模拟数据、初始化对象等;
  • Act 是行为阶段,这个阶段是用准备好的数据去调用要测试的方法;
  • Assert 是断定阶段,就是把调用目标方法返回的值和预期的值进行比较,如果和预期一致说明测试通过,否则为失败。

 新建一个单元测试类:ValuesTest.cs;用于对ValuesController进行单元测试。

 1、使用HttpClient进行Get请求测试,单元测试代码如下:

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost;
using Newtonsoft.Json;
using System.Net;
using System.Net.Http;
using System.Net.Mime;
using System.Text;
using System.Threading.Tasks;
using Xunit;
using Xunit.Abstractions;

namespace WebAPI.xUnit
{
    public class ValuesTests
    {
        public ValuesTests(ITestOutputHelper outputHelper)
        {
            var server = new TestServer(WebHost.CreateDefaultBuilder()
                .UseStartup<Startup>());
            Client = server.CreateClient();            
        }

        public HttpClient Client { get; }
        
        [Fact]
        public async Task GetById_ShouldBe_Ok()
        {
            // Arrange
            var id = 1;

            // Act
            var response = await Client.GetAsync($"/api/values/{id}");

            // Assert
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        }
    }
}

这里我们通过 TestServer 拿到一个 HttpClient 对象,用它我们可以模拟 Http 请求。我们写了一个非常简单的测试用例,完整演示了单元测试的 Arrange,Act 和 Assert 三个步骤。

 2、使用HttpClient进行Post请求测试,并用ITestOutputHelper输出请求信息,单元测试代码如下:

 

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost;
using Newtonsoft.Json;
using System.Net;
using System.Net.Http;
using System.Net.Mime;
using System.Text;
using System.Threading.Tasks;
using Xunit;
using Xunit.Abstractions;

namespace WebAPI.xUnit
{
    public class ValuesTests
    {
        public ValuesTests(ITestOutputHelper outputHelper)
        {
            var server = new TestServer(WebHost.CreateDefaultBuilder()
                .UseStartup<Startup>());
            Client = server.CreateClient();
            Output = outputHelper;
        }

        public HttpClient Client { get; }
        public ITestOutputHelper Output { get; }

        [Fact]
        public async Task Post_ShouldBe_OK()
        {
            var content = new StringContent(JsonConvert.SerializeObject(new { Name = "cxt", Age = 22 }), Encoding.UTF8, MediaTypeNames.Application.Json);

            var response = await Client.PostAsync("/api/values", content);

            // Output
            var responseTest = await response.Content.ReadAsStringAsync();

            Output.WriteLine(responseTest);

            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        }
    }
}

 3、运行测试用例,得到测试结果。

在当前的方法内,GetById_ShouldBe_Ok()、Post_ShouldBe_OK()代码块内右键->运行测试,或者打开测试资源管理器,运行所选测试

绿色的勾表示已经测试通过。

下面查看Post请求的Output打印结果:

 

 通过上面两个测试用例,发现使用起来超级方便。

 

转载于:https://www.cnblogs.com/cxt618/p/10660007.html

最后

以上就是从容乐曲为你收集整理的使用 xUnit 编写 ASP.NET Core WebAPI单元测试的全部内容,希望文章能够帮你解决使用 xUnit 编写 ASP.NET Core WebAPI单元测试所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部