zoukankan      html  css  js  c++  java
  • .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;
    }
    

    测试通过
    在这里插入图片描述

  • 相关阅读:
    SpringBoot是如何动起来的
    Windows 10 安装 Docker for Windows
    Spring Boot2.0 设置拦截器
    修改博客园的css样式
    Spring-Aop
    Java自学-泛型 集合中的泛型
    Java自学-集合框架 聚合操作
    Java自学-集合框架 Comparator和Comparable
    Java自学-集合框架 hashCode原理
    Java自学-集合框架 HashSet、LinkedHashSet、TreeSet之间的区别
  • 原文地址:https://www.cnblogs.com/zhaobingwang/p/12343676.html
Copyright © 2011-2022 走看看