(八)RestAPI 毛子(Unit Testing/Integration)

发布于:2025-05-01 ⋅ 阅读:(31) ⋅ 点赞:(0)


项目地址

  • 教程作者:
  • 教程地址:
  • 代码仓库地址:
  • 所用到的框架和插件:
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()
    {
   
        // Arrange
        var dto = new CreateEntryDto
        {
   
            HabitId = Habit.NewId(),
            Value = 1,
            Date = DateOnly.FromDateTime(DateTime.UtcNow)
        };

        // Act
        ValidationResult validationResult = await _validator.ValidateAsync(dto);

        // Assert
        Assert.True(validationResult.IsValid);
        Assert.Empty(validationResult.Errors); //通过验证,错误列表为空
    }

    [Fact]
    public async Task Validate_ShouldFail_WhenHabitIdIsEmpty()
    {
   
        // Arrange
        var dto = new CreateEntryDto
        {
   
            HabitId = string.Empty,
            Value = 1,
            Date = DateOnly.FromDateTime(DateTime.UtcNow)
        };

        // Act
        ValidationResult validationResult = await _validator.ValidateAsync(dto);

        // Assert
        Assert.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