单元测试是对软件中的最小可测试单元进行检查和验证。对于单元测试,要保证测试粒度足够小,才能准肯定位问题。一般而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。执行单元测试,是为了证实某段代码的行为确实和开发者所指望的一致。咱们在编写测试代码时,应该要保证代码的自动执行,并不是交互式的,保证测试用例的自动执行,不须要对测试结果进行人工验证。github
单元测试除了协助本地开发,一般还放在持续集成中。每次有代码签入,单元测试都会被执行。所以单元测试要保证可重复执行,不能受外界环境影响。咱们在编码设计时,可将外部依赖项经过DI容器注入。好比,咱们有一个接口,依赖日志中间件,数据库等,咱们就能够经过DI注入一个内存数据库和Mock对象来实现。数据库
编写一段代码,实现一个功能:判断一个字符串是否时长文本(约定长度大于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; }
测试经过