文章目录
- 项目地址
- 一、Unit Testing
- 1.1 创建X unit 测试项目
- 1. 创建项目目录
- 2. 管理包
- 1.2 创建CreateEntryDtoValidator测试
- 1.3 创建CreateEntryDtoValidator测试
- 二、Integration test
- 2.1 创建Integration test环境
- 1. 安装所需要的包
- 2.2 配置基础设置
- 1. 数据库链接DevHabitWebAppFactory
- 2.创建测试共享类IntegrationTestCollection
- 3. 注入登录用户
- 2.3 添加测试用例
- 1. 测试用户创建
- 2. 测试添加Habits
- 2.4 测试外部服务/微服务
- 1. 安装所需要的包
- 2. 修改DevHabitWebAppFactory
- 3. 修改github的网址到配置里
项目地址
- 教程作者:
- 教程地址:
- 代码仓库地址:
- 所用到的框架和插件:
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(){// 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