.NET Core之单元测试(一):入门
什么是单元测试
单元测试是对软件中的最小可测试单元进行检查和验证。对于单元测试,要保证测试粒度足够小,才能准确定位问题。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。执行单元测试,是为了证明某段代码的行为确实和开发者所期望的一致。我们在编写测试代码时,应该要保证代码的自动执行,并非交互式的,保证测试用例的自动执行,不需要对测试结果进行人工验证。
单元测试除了协助本地开发,通常还放在持续集成中。每次有代码签入,单元测试都会被执行。因此单元测试要保证可重复执行,不能受外界环境影响。我们在编码设计时,可将外部依赖项通过DI容器注入。比如,我们有一个接口,依赖日志中间件,数据库等,我们就可以通过DI注入一个内存数据库和Mock对象来实现。
.NET Core中的测试框架
一个最基础的单元测试
编写一段代码,实现一个功能:判断一个字符串是否时长文本(约定长度大于6即为长文本)
public class UnitTestSample
{
public static bool IsStringLong(string val)
{
return val.Length > 6;
}
}
我们现在编写一个单元测试,测试长文本
本测试用例使用xUnit
Install-Package xunit -Version 2.4.1
测试方法名建议:待测试方法名+预期结果+参数
using Xunit;
public class UnitTestSampleTest
{
[Fact]
public void IsStringLong_ReturnTrue_WithExpectedParameters()
{
// Arrange
string val = "1234567";
// Act
var actual = UnitTestSample.IsStringLong(val);
// Assert
Assert.True(actual);
}
}
如果你使用的Visual Studio进行开发,你可以选择开启Live Unit Testing

当你编写完测试代码后,Visual Studio会自动运行测试,如下(通过测试的代码会有一个勾):

当然,你也可以打开测试资源管理器运行测试


我们再看看上面的代码
上面我们只对正常情况下进行了测试,如果我们传入null值呢?对于null值,其实我们是期望返回false,我们编写以下测试代码
[Fact]
public void IsStringLong_ReturnTrue_WithNullParameters()
{
// Arrange
string val = null;
// Act
var actual = UnitTestSample.IsStringLong(val);
// Assert
Assert.False(actual);
}
我们发现测试未通过:

查看测试结果发现产生了一个System.NullReferenceException 异常

我们看前面编写的功能代码,发现return val.Length > 6并没有对null值进行处理,现在修改此代码:
public static bool IsStringLong(string val)
{
return val?.Length > 6;
}
测试通过

.NET Core之单元测试(一):入门的更多相关文章
- ASP.Net Core 2.2 MVC入门到基本使用系列 (二)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (一)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (三)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (四)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Redis使用
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-从零开始启动Osharp
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-代码生成器的使用
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- 《ASP.NET Core跨平台开发从入门到实战》Web API自定义格式化protobuf
<ASP.NET Core跨平台开发从入门到实战>样章节 Web API自定义格式化protobuf. 样章 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于 ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Hangfire使用
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
随机推荐
- OpenStack Identity API v3 extensions (CURRENT)
Table Of Contents Identity API v3 extensions (CURRENT) OS-ENDPOINT-POLICY API Associate policy and e ...
- dfs序 + 树状数组
You are given a tree, it’s root is p, and the node is numbered from 1 to n. Now define f(i) as the n ...
- Typescript 实战 --- (7)类型兼容性
ts 允许类型兼容的变量相互赋值,这个特性增加了语言的灵活性 当一个 类型Y 可以被赋值给另一个 类型X 时,就可以说类型X兼容类型Y.其中,X被称为“目标类型”,Y被称为“源类型” X兼容Y : ...
- url的分发
一.分发 补充:通过查看源码:可以通过二级路由include进行二次分发 位置:urls.py urlpatterns = [ path('admin/', admin.site.urls), pat ...
- Qt Installer Framework翻译(5-1)
创建离线安装程序 脱机安装程序在安装过程中根本不会尝试连接在线存储库.但是,元数据配置(config.xml)使用户可以在线添加和更新组件. 在公司防火墙不允许用户连接到Web服务器的情况下,脱机安装 ...
- Thematic002.字符串专题
目录 Trie字典树 KMP AC自动机 Manacher 回文自动机 后缀数组 后缀自动机 Trie字典树 概念 我们先来看看什么是Trie字典树 可以发现,这棵树的每一条边都有一个字符 有一些点是 ...
- python3操作PyMySQL笔记
python3操作mysql需要先安装PyMySQL pip install PyMySQL 在linux登录mysql ,并且在安装数据库时设置了数据库的用户名“root”和密码“root”,mys ...
- 理解Javascript的柯里化
前言 本文1454字,阅读大约需要4分钟. 总括: 本文以初学者的角度来阐述Javascript中柯里化的概念以及如何在工作中进行使用. 原文地址:理解Javascript的柯里化 知乎专栏: 前端进 ...
- 工具 之uniq
uniq命令的作用:显示唯一的行,对于那些连续重复的行只显示一次!接下来通过实践实例说明. [关键字] Linux Shell uniq 看test.txt文件的内容,可以看到其中的连续重复行 [ro ...
- docker扫盲,面试连这都不会就等着挂吧!
现在很多公司项目部署都是采用K8S docker容器方式,出门面试被问的概率极大,如果被面试官问docker相关知识点直接懵逼,那么基本就是被pass了,除非其他方面技术过硬.所以这种相对前沿的技术, ...