项目地址
- 教程作者:
- 教程地址:
- 代码仓库地址:
- 所用到的框架和插件:
dbt
airflow
一、Unit Testing
- 适合单元测试的代码
1.1 创建X unit 测试项目
1. 创建项目目录
- 创建测试
- 目录
2. 管理包
- 修改Packages.props
- 修改项目本身的包,并且添加项目引用到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>
- 在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