什么是单元测试

单元测试是对软件中的最小可测试单元进行检查和验证。对于单元测试,要保证测试粒度足够小,才能准确定位问题。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。执行单元测试,是为了证明某段代码的行为确实和开发者所期望的一致。我们在编写测试代码时,应该要保证代码的自动执行,并非交互式的,保证测试用例的自动执行,不需要对测试结果进行人工验证。

单元测试除了协助本地开发,通常还放在持续集成中。每次有代码签入,单元测试都会被执行。因此单元测试要保证可重复执行,不能受外界环境影响。我们在编码设计时,可将外部依赖项通过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之单元测试(一):入门的更多相关文章

  1. ASP.Net Core 2.2 MVC入门到基本使用系列 (二)

    本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...

  2. ASP.Net Core 2.2 MVC入门到基本使用系列 (一)

    本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...

  3. ASP.Net Core 2.2 MVC入门到基本使用系列 (三)

    本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...

  4. ASP.Net Core 2.2 MVC入门到基本使用系列 (四)

    本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...

  5. OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Redis使用

    OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...

  6. OsharpNS轻量级.net core快速开发框架简明入门教程-从零开始启动Osharp

    OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...

  7. OsharpNS轻量级.net core快速开发框架简明入门教程-代码生成器的使用

    OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...

  8. OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能

    OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...

  9. 《ASP.NET Core跨平台开发从入门到实战》Web API自定义格式化protobuf

    <ASP.NET Core跨平台开发从入门到实战>样章节 Web API自定义格式化protobuf. 样章 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于 ...

  10. OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Hangfire使用

    OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...

随机推荐

  1. OpenStack Identity API v3 extensions (CURRENT)

    Table Of Contents Identity API v3 extensions (CURRENT) OS-ENDPOINT-POLICY API Associate policy and e ...

  2. 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 ...

  3. Typescript 实战 --- (7)类型兼容性

    ts 允许类型兼容的变量相互赋值,这个特性增加了语言的灵活性   当一个 类型Y 可以被赋值给另一个 类型X 时,就可以说类型X兼容类型Y.其中,X被称为“目标类型”,Y被称为“源类型” X兼容Y : ...

  4. url的分发

    一.分发 补充:通过查看源码:可以通过二级路由include进行二次分发 位置:urls.py urlpatterns = [ path('admin/', admin.site.urls), pat ...

  5. Qt Installer Framework翻译(5-1)

    创建离线安装程序 脱机安装程序在安装过程中根本不会尝试连接在线存储库.但是,元数据配置(config.xml)使用户可以在线添加和更新组件. 在公司防火墙不允许用户连接到Web服务器的情况下,脱机安装 ...

  6. Thematic002.字符串专题

    目录 Trie字典树 KMP AC自动机 Manacher 回文自动机 后缀数组 后缀自动机 Trie字典树 概念 我们先来看看什么是Trie字典树 可以发现,这棵树的每一条边都有一个字符 有一些点是 ...

  7. python3操作PyMySQL笔记

    python3操作mysql需要先安装PyMySQL pip install PyMySQL 在linux登录mysql ,并且在安装数据库时设置了数据库的用户名“root”和密码“root”,mys ...

  8. 理解Javascript的柯里化

    前言 本文1454字,阅读大约需要4分钟. 总括: 本文以初学者的角度来阐述Javascript中柯里化的概念以及如何在工作中进行使用. 原文地址:理解Javascript的柯里化 知乎专栏: 前端进 ...

  9. 工具 之uniq

    uniq命令的作用:显示唯一的行,对于那些连续重复的行只显示一次!接下来通过实践实例说明. [关键字] Linux Shell uniq 看test.txt文件的内容,可以看到其中的连续重复行 [ro ...

  10. docker扫盲,面试连这都不会就等着挂吧!

    现在很多公司项目部署都是采用K8S docker容器方式,出门面试被问的概率极大,如果被面试官问docker相关知识点直接懵逼,那么基本就是被pass了,除非其他方面技术过硬.所以这种相对前沿的技术, ...