.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
.NET Core之单元测试(一):入门
当你编写完测试代码后,Visual Studio会自动运行测试,如下(通过测试的代码会有一个勾):
.NET Core之单元测试(一):入门

当然,你也可以打开测试资源管理器运行测试
.NET Core之单元测试(一):入门
.NET Core之单元测试(一):入门

我们再看看上面的代码

上面我们只对正常情况下进行了测试,如果我们传入null值呢?对于null值,其实我们是期望返回false,我们编写以下测试代码

[Fact]
public void IsStringLong_ReturnTrue_WithNullParameters()
{
    // Arrange
    string val = null;

    // Act
    var actual = UnitTestSample.IsStringLong(val);

    // Assert
    Assert.False(actual);
}

我们发现测试未通过:
.NET Core之单元测试(一):入门

查看测试结果发现产生了一个System.NullReferenceException异常
.NET Core之单元测试(一):入门
我们看前面编写的功能代码,发现return val.Length > 6并没有对null值进行处理,现在修改此代码:

public static bool IsStringLong(string val)
{
    return val?.Length > 6;
}

测试通过
.NET Core之单元测试(一):入门

相关推荐