当前位置: 首页 > news >正文

(八)RestAPI 毛子(Unit Testing)


文章目录

  • 项目地址
  • 一、Unit Testing
    • 1.1 创建X unit 测试项目
      • 1. 创建项目目录
      • 2. 管理包
    • 1.2 创建CreateEntryDtoValidator测试
    • 1.3 创建CreateEntryDtoValidator测试


项目地址

  • 教程作者:
  • 教程地址:
  • 代码仓库地址:
  • 所用到的框架和插件:
dbt 
airflow

一、Unit Testing

  • 适合单元测试的代码

在这里插入图片描述

1.1 创建X unit 测试项目

1. 创建项目目录

  • 创建测试
    在这里插入图片描述
  • 目录
    在这里插入图片描述

2. 管理包

  1. 修改Packages.props
    在这里插入图片描述
  2. 修改项目本身的包,并且添加项目引用到api项目
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><IsPackable>false</IsPackable></PropertyGroup><ItemGroup><PackageReference Include="coverlet.collector" /><PackageReference Include="Microsoft.NET.Test.Sdk" /><PackageReference Include="xunit" /><PackageReference Include="xunit.runner.visualstudio" /></ItemGroup><ItemGroup><ProjectReference Include="..\DevHabit\DevHabit.Api\DevHabit.Api.csproj" /></ItemGroup><ItemGroup><Using Include="Xunit" /></ItemGroup></Project>
  1. 在api的项目配置中添加,我们就可以引用internal 类型在Unitest里
    在这里插入图片描述

1.2 创建CreateEntryDtoValidator测试

  • 创建CreateEntryDtoValidatorTests用来测试
    在这里插入图片描述
namespace DevHabit.UnitTests.Validators;
public class CreateEntryDtoValidatorTests
{private readonly CreateEntryDtoValidator _validator = new();[Fact] // 用来定义不带参数的独立测试public async Task Validate_ShouldSucceed_WhenInputDtoIsValid(){// Arrangevar dto = new CreateEntryDto{HabitId = Habit.NewId(),Value = 1,Date = DateOnly.FromDateTime(DateTime.UtcNow)};// ActValidationResult validationResult = await _validator.ValidateAsync(dto);// AssertAssert.True(validationResult.IsValid);Assert.Empty(validationResult.Errors); //通过验证,错误列表为空}[Fact]public async Task Validate_ShouldFail_WhenHabitIdIsEmpty(){// Arrangevar dto = new CreateEntryDto{HabitId = string.Empty,Value = 1,Date = DateOnly.FromDateTime(DateTime.UtcNow)};// ActValidationResult validationResult = await _validator.ValidateAsync(dto);// AssertAssert.False(validationResult.IsValid); //验证失败ValidationFailure validationFailure = Assert.Single(validationResult.Errors); //检查错误列表里应该有且只有一个错误Assert.Equal(nameof(CreateEntryDto.HabitId), validationFailure.PropertyName); //验证这个错误是针对 HabitId 字段的}
}

1.3 创建CreateEntryDtoValidator测试

  • 为加密服务创建测试

public sealed class EncryptionServiceTests
{private readonly EncryptionService _encryptionService;public EncryptionServiceTests(){IOptions<EncryptionOptions> options = Options.Create(new EncryptionOptions{Key = Convert.ToBase64String(RandomNumberGenerator.GetBytes(32))});_encryptionService = new EncryptionService(options);}[Fact]public void EncryptAndDecrypt_ShouldReturnOriginalPlainText(){// Arrangeconst string plainText = "sensitive data";string cipherText = _encryptionService.Encrypt(plainText);// Actstring decryptedText = _encryptionService.Decrypt(cipherText);// AssertAssert.Equal(plainText, decryptedText);}
}

相关文章:

  • 爬虫学习笔记(二)--web请求过程
  • 如何获取按关键字搜索京东商品详情(代码示例)
  • Modbus总线协议智能网关协议转换案例解析:提升系统兼容性
  • 导入使用 Blender 创建的 glTF/glb 格式的 3D 模型
  • 激光测距仪,精准测量的利器
  • C++ 可调用实体 (详解 一站式)
  • 在Linux系统中安装MySQL,二进制包版
  • STL标准模板库
  • 设备指纹护航电商和金融反欺诈体系建设
  • delphi使用sqlite3
  • 入门版 鸿蒙 组件导航 (Navigation)
  • Java 中的 Continuation:深入理解虚拟线程的基石
  • Uni-app网络请求AES加密解密实现
  • Uniapp:showLoading(等待加载)
  • Docker安装的mysql限制ip访问
  • 1. 用户之窗
  • iVX 图形化编程如何改写后端开发新范式
  • 后端Web实战之登录认证,JWT令牌,过滤器Filter,拦截器Interceptor一篇文章so easy!!!
  • vuex源码分析(一)——初始化vuex
  • truffle
  • 借助AI应用,自闭症人群开始有可能真正“读懂他人”
  • 人社部:我国劳动力市场潜力足,韧性强
  • 央行副行长谈美债和美元波动:单一市场、单一资产的变动,对外储影响总体有限
  • 我的科学观|张峥:AI快速迭代,我们更需学会如何与科技共处
  • 伊朗外长:美伊谈判进展良好,讨论了很多技术细节
  • 敲定!今年将制定金融法、金融稳定法