.NET Core之单元测试(四):Fluent Assertions的使用
什么是Fluent Assertions
Fluent Assertions 是 .NET 平台下的一组扩展方法,用于单元测试中的断言。它使你的单元测试中的断言看起来更自然流畅。断言风格如下:
string actual = "ABCDEFGHI";
actual.Should().StartWith("AB").And.EndWith("HI").And.Contain("EF").And.HaveLength(9);
更多内容可查看 Fluent Assertions Documentation
待测试API
[HttpGet("{id}")]
public async Task<IActionResult> Get(int id)
{
var sampleData = await _sqliteDbContext.SampleEntity
.SingleOrDefaultAsync(s => s.Id == id);
if (sampleData?.StringValue == "ping")
{
var pingOk = _foo.Ping("localhost");
if (!pingOk)
return NotFound();
}
return Ok(sampleData);
}
测试用例
Install-Package FluentAssertions -Version 5.10.2
我们对前文中的测试用例进行修改,改动如下:
// Assert
var result = response.Should().BeOfType<OkObjectResult>().Subject;
var sampleData = result.Value.Should().BeAssignableTo<SampleEntity>().Subject;
sampleData.Id.Should().Be(2);
sampleData.BoolValue.Should().BeFalse();
sampleData.StringValue.Should().Be("ping");
完整代码如下
[TestMethod]
public async Task Get_ReturnOK_WithPingTrue_UsingFluentAssertions()
{
// Arrange
var dbContext = await GetSqliteDbContextAsync();
var loggerMock = new Mock<ILogger<SampleController>>();
var logger = loggerMock.Object;
var fooMock = new Mock<IFoo>();
fooMock.Setup(foo => foo.Ping("localhost")).Returns(true);
var foo = fooMock.Object;
var controller = new SampleController(dbContext, logger, foo);
// Act
var response = await controller.Get(2);
// Assert
var result = response.Should().BeOfType<OkObjectResult>().Subject;
var sampleData = result.Value.Should().BeAssignableTo<SampleEntity>().Subject;
sampleData.Id.Should().Be(2);
sampleData.BoolValue.Should().BeFalse();
sampleData.StringValue.Should().Be("ping");
}
测试通过

.NET Core之单元测试(四):Fluent Assertions的使用的更多相关文章
- 浅谈.Net Core后端单元测试
目录 1. 前言 2. 为什么需要单元测试 2.1 防止回归 2.2 减少代码耦合 3. 基本原则和规范 3.1 3A原则 3.2 尽量避免直接测试私有方法 3.3 重构原则 3.4 避免多个断言 3 ...
- Net Core WebApi单元测试
单元测试 本篇将结合这个系列的例子的基础上演示在Asp.Net Core里如何使用XUnit结合Moq进行单元测试,同时对整个项目进行集成测试. 第一部分.XUnit 修改 Project.json ...
- 再谈EF Core内存数据库单元测试问题
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:在用EF Core的内存数据库进行单元测试的时候遇到"无法访问已释放的对象& ...
- asp.net core 教程(四)-项目结构
Asp.Net Core-项目结构 Asp.Net Core-项目结构 案例 在这一章,我们将讨论 ASP.NET Core项目在文件系统上的组成方式以及不同的文件和目录都是如何协同工作的. 让我们打 ...
- 4. [mmc subsystem] mmc core(第四章)——host模块说明
零.说明 对应代码drivers/mmc/core/host.c,drivers/mmc/core/host.h. 为底层host controller driver实现mmc host的申请以及注册 ...
- ASP.NET CORE 中用单元测试测试控制器
之前用ASP.NET CORE做的项目 加了一个新功能,数据库加了个字段balabala.... 更新到服务器上,新功能测试正常,然后就没管了..... 今天客户说网站有BUG,某个页面打开后出错了, ...
- 使用 xUnit 编写 ASP.NET Core WebAPI单元测试
本文使用xUnit对ASP.NET Core WebAPI做单元测试,使用HttpClient的同步和异步请求,下面详细介绍xUnit的使用过程: 一.创建示例项目 模板为我们自动创建了一个Value ...
- Asp.Net Core 进阶(四)—— 过滤器 Filters
一.介绍 Asp.Net Core Filter 使得可以在请求处理管道的特定阶段的前后执行代码,我们可以创建自定义的 filter 用于处理横切关注点. 横切关注点的示例包括错误处理.缓存.配置.授 ...
- .NET Core之单元测试(一):入门
目录 什么是单元测试 .NET Core中的测试框架 一个最基础的单元测试 我们再看看上面的代码 什么是单元测试 单元测试是对软件中的最小可测试单元进行检查和验证.对于单元测试,要保证测试粒度足够小, ...
随机推荐
- codeforces 上的找两人的幸运天
Bob and Alice are often participating in various programming competitions. Like many competitive pro ...
- FFT 入门
推荐博客 :https://oi.men.ci/fft-notes/ 卷积的理解 : https://www.zhihu.com/question/22298352?rf=21686447 题目链接 ...
- sg函数的变形 - 可以将一堆石子分开
Nim is a two-player mathematic game of strategy in which players take turns removing objects from di ...
- crawler碎碎念6 豆瓣爬取操作之获取数据
import requests from lxml import etree s = requests.Session() for id in range(0,251,25): url ='https ...
- python 自定义expection
class PricePolicyInvalid(Exception): def __init__(self, msg): self.msg = msg
- spring Cloud-eureka的保护模式
eureka的首页出现以下警告 EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. REN ...
- [bzoj4567] [loj#2012] [SCOI2016] 背单词
Description \(Lweb\) 面对如山的英语单词,陷入了深深的沉思,「我怎么样才能快点学完,然后去玩三国杀呢?」.这时候睿智的凤老师从远处飘来,他送给了 \(Lweb\) 一本计划册和一大 ...
- Go的切片:长度和容量
虽然说 Go 的语法在很大程度上和 PHP 很像,但 PHP 中却是没有"切片"这个概念的,在学习的过程中也遇到了一些困惑,遂做此笔记. 困惑1:使用 append 函数为切片追加 ...
- Kubernetes学习(一)
一 安装 三台机器搭建K8S集群,一台master两台woker Docker 18.09.0---kubeadm-1.14.0-0 kubelet-1.14.0-0 kubectl-1.14.0-0 ...
- Mavn 项目 引入第三方jar包 导致ClassNotFoundException
案例 我有一个Maven构建的项目,项目模块之间有依赖关系,我需要用到一个本地的jar包,而该jar包不能通过配置pom.xml文件从远程仓库自动下载,于是我直接导入该jar包到其中一个项目,不通过p ...