• c# 单元测试


    1 前言

    在开发asp.net core web api服务时,想要测试某个服务经常要为service编写一个测试的控制器,然后再通过api来访问进行测试,这样需要频繁的重启服务,而且调试起来也不方便,使用单元测试能够很好的解决这一问题。

    2 测试框架选择

    XUnit

    其实测试框架有多种选择:

    NUnit 、 XUnit 、 MSTest

    • NUnit 是 XUnit 的前生

    • XUnit 是面向 .NET Core 的.

    • MSTest 是微软自带的, 但是很少人用

    微软官网三个教程都有,因为我们要对asp.net core进行测试,所以选则 XUnit

    在csproj中添加依赖,或者在nuget中下载。

    <Project Sdk="Microsoft.NET.Sdk.Web">
      <ItemGroup>
        <PackageReference Include="xunit" Version="2.4.1" />
      ItemGroup>
    Project>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    moq

    moq 在 TDD 扮演很重要的角色
    参考链接: moq4 Quickstart

    Service 通常会有许多依赖, 我们在做单元测试时不能像spring一样直接使用这些依赖, 不然依赖有问题就会被误以为是这个 Service 的问题.

    因为asp.net 觉得,我们测试的是这个方法,不需要依赖其他的类,所以当我们依赖于其他的类时,可以使用mock来构建所需的对象。
    在csproj中添加依赖,或者在nuget中下载。

    <Project Sdk="Microsoft.NET.Sdk.Web">
      <ItemGroup>
        <PackageReference Include="Moq" Version="4.18.1" />
      ItemGroup>
    Project>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3 使用示例

    public class Test
    {
        private readonly ITestOutputHelper _testOutputHelper;
    
        public Test(ITestOutputHelper testOutputHelper)
        {
            _testOutputHelper = testOutputHelper;
        }
    
        /// 
        /// 单元测试基础用法
        /// 
        [Fact]
        public void testBasic()
        {
            var mockConfiguration = new Mock<IConfiguration>();
            mockConfiguration.SetupGet(obj => obj["AppSettings:TransUrl"]).Returns("127.0.0.1");
            IConfiguration configuration = mockConfiguration.Object;
            _testOutputHelper.WriteLine(configuration["AppSettings:TransUrl"]);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    运行结果:
    在这里插入图片描述

  • 相关阅读:
    Hive概念及Hive,MySQL安装、配置
    【BUUCTF】roarctf_2019_realloc_magic---从一道题认识realloc函数+stdout泄露libc地址实战
    设计模式之【职责链模式】
    linux http代理设置
    Linux之多线程
    G2plot 面积图Area更新空数据,页面渲染不彻底
    计数器介绍
    ssm 基于springboot的车辆故障管理系统Java
    NLP之Bi-LSTM(在长句中预测下一个单词)
    React(6)-类组件的setState异步问题
  • 原文地址:https://blog.csdn.net/weixin_43702146/article/details/125974942