测试方法论

This commit is contained in:
hello 2024-06-29 08:01:17 +08:00
parent 4075405bfe
commit f0b59294a9
2 changed files with 90 additions and 17 deletions

View File

@ -1 +1,47 @@
测试几行代码,我们基本上做很多工作。 # 零度框架升级 8.0 稳定版
随着微软 Aspire 正式版的发布,零度框架 HelloShop 8.0 版本也正式发布了,本次改进高达 180 多项,代码已推送到 Github主要包括以下几个方面。
## 升级到最新稳定版
之前,零度框架使用的是 Aspire 的多个预览版,导致了一些不稳定的问题,现在,零度框架和所有依赖包都升级到了最新稳定版,不再引用任何预览包,卸载掉 Visual Studio 2022 预览版,并升级到 17.10.0 稳定版,卸载掉所有 .NET 9.0 预览版,安装 .NET 8.0 SDK 稳定版,卸载掉所有 Aspire 预览版,将 Aspire 工作负载升级到 8.0.0 稳定版。项目所依赖的所有 NuGet 包都升级到了最新稳定版。
现在,零度框架和所有依赖包都升级到了最新稳定版,不再引用任何预览包。
## 远程权限检查改进
`PermissionsController``RemotePermissionChecker` 引入 RoleId 角色权限检查,
## 创建虚拟授权类用于测试
使用 `FakePermissionChecker` 类来模拟权限检查,方便后续单元和集成测试。
## 创建 Aspire 集成测试项目
创建 `HelloShop.FunctionalTests` 项目,该项目使用 Aspire 模板创建,用于集成测试,包括了一个 `FirstWebApiIntegrationTest` 测试类,用于测试所有微服务 Web API 的集成。
## 创建产品单元测试项目
创建 `HelloShop.ProductService.UnitTests` 项目,该项目使用 xUnit 模板创建,用于单元测试产品微服务中的代码,包括了一个 `ProductsControllerTest` 测试类,用于演示使用内存数据库模拟数据进行单元测试。包括一个 `MockProductsControllerTest` 测试类,用于演示使用 Moq 框架模拟数据进行单元测试。
## 创建产品集成测试项目
创建 `HelloShop.ProductService.FunctionalTests` 项目,该项目使用 xUnit 模板创建,用于集成测试产品微服务中的代码,包括了一个 `BrandApiIntegrationTest` 测试类,用于演示产品品牌 API 接口的集成测试,为了提高集成测试效率,使用 SQLite 内存数据库模拟数据,同时使用 `WebApplicationFactory` 类来模拟 Web 主机,以便在集成测试中使用真实的 HTTP 请求。通过使用 `WebApplicationFactory` 类,实现自动登录和令牌传递,以便在集成测试中使用真实的用户身份。
## 项目启动端口配置
为了项目更好的同时兼容 HTTP 和 HTTPS每个微服务 `launchSettings` 文件中添加了 HTTP 和 HTTPS 端口配置,并约定 80xx 为 HTTP 端口81xx 为 HTTPS 端口, 任何微服务都可通过两种协议访问以便于测试。
## 修复由于包升级导致的编译错误
这些升级包括 OpenApi 界面、删除过期的代码,修复由于包升级导致的编译错误。
## MAUI 项目升级
将 MAUI 项目升级到最新稳定版,修复由于包升级导致的编译错误。
## 后期版本计划
后期内容包括Blazor 中控界面搭建、前端认证授权, MAUI 跨平台开发、安卓、IOS、MacOS、Windows 跨平台界面制作后台自动任务管理、gRPC 微服务最佳实践、基于 Dapr 的事件服务总线和密钥管理、基于 Orleans 的分布式计算、基于 Aspire 项目的单机部署, K8S 集群容器化部署和 CI/CD 最佳实践,使用 OpenTelemetry 实现监控和追踪,使用 Prometheus 和 Grafana 实现监控和报警,分布式日志链路跟踪,性能追踪。

View File

@ -4,9 +4,9 @@
## 单元测试 ## 单元测试
单元测试是一种试验单个软件组件或方法(也称为“工作单元”)的测试。 单元测试仅应测试开发人员控件内的代码。 它们不测试基础结构问题。 基础结构问题包括与数据库、文件系统和网络资源的交互 单元测试是一种试验单个软件组件或方法(也称为“工作单元”)的测试。 单元测试仅应测试开发人员控件内的代码。 它们不测试基础结构问题。 基础结构问题包括与数据库、文件系统和网络资源的交互,零度框架中的单元测试使用 `xUnit` 框架,
项目命名规范: `<ProjectNamej>.UnitTests`。 项目命名规范: `<ProjectName>.UnitTests`。
```csharp ```csharp
public class Calculator public class Calculator
@ -40,39 +40,62 @@ https://learn.microsoft.com/zh-cn/dotnet/core/testing/unit-testing-best-practice
## 集成测试 ## 集成测试
集成测试与单元测试的不同之处在于,它试验两个或更多软件组件一同工作(也称为其“集成”)的能力。这些测试在更广泛范围的受测系统上运行,而单元测试则侧重于单个组件通常,集成测试会包括对基础结构问题的测试。 集成测试也称为功能测试,与单元测试的不同之处在于,它试验两个或更多软件组件一同工作集成能力。这些测试在更广泛范围的受测系统上运行,而单元测试则侧重于单个组件函数,通常,集成测试会包括对基础结构问题的测试,例如数据库、文件系统和网络资源的交互
项目命名规范: `<ProjectNamej>.FunctionalTests`。 项目命名规范: `<ProjectName>.FunctionalTests`。
```csharp ```csharp
public class Calculator public class Controller: ControllerBase
{ {
public int Add(int a, int b) private readonly IService _service;
public Controller(IService service)
{ {
return a + b; _service = service;
}
[HttpGet]
public async Task<IActionResult> Get(int id)
{
var result = await _service.Get(id);
return Ok(result);
} }
} }
public class CalculatorTests public class Service: IService
{ {
public async Task<Model> Get(int id)
{
return await _repository.Get(id);
}
}
public class ServiceTest: IClassFixture<WebApplicationFactory<Startup>>
{
private readonly WebApplicationFactory<Startup> _factory;
public ServiceTest(WebApplicationFactory<Startup> factory)
{
_factory = factory;
}
[Fact] [Fact]
public void Add_WhenCalled_ReturnsTheSumOfArguments() public async Task Get_WhenCalled_ReturnsModel()
{ {
// Arrange // Arrange
var calculator = new Calculator(); var client = _factory.CreateClient();
var response = await client.GetAsync("/api/controller/1");
// Act response.EnsureSuccessStatusCode();
var result = calculator.Add(1, 2); var model = await response.Content.ReadAsAsync<Model>();
// Assert // Assert
Assert.Equal(3, result); Assert.NotNull(model);
} }
} }
``` ```
## 负载测试和压力测试 ## 负载测试和压力测试
负载测试:测试应用是否可以在特定情况下处理指定的用户负载,同时仍满足响应目标,应用在正常状态下运行。 负载测试:测试应用是否可以在特定情况下处理指定的用户负载,同时仍满足响应目标,应用在正常状态下运行。
压力测试:在极端条件下(通常为长时间)运行时测试应用的稳定性,测试会对应用施加高用户负载(峰值或逐渐增加的负载)或限制应用的计算资源。 压力测试:在极端条件下(通常为长时间)运行时测试应用的稳定性,测试会对应用施加高用户负载(峰值或逐渐增加的负载)或限制应用的计算资源。
@ -82,3 +105,7 @@ public class CalculatorTests
## 在 Blazor 中测试 Razor 组件 ## 在 Blazor 中测试 Razor 组件
Playwright for .NET 就是一个可用于 Blazor 应用的 E2E 测试框架。没有面向 Blazor 的官方 Microsoft 测试框架,但社区驱动的项目 bUnit 提供一种方便的方法来对 Razor 组件进行单元测试。bUnit 适用于常规用途的测试框架,例如 MSTest、NUnit 和 xUnit。 Playwright for .NET 就是一个可用于 Blazor 应用的 E2E 测试框架。没有面向 Blazor 的官方 Microsoft 测试框架,但社区驱动的项目 bUnit 提供一种方便的方法来对 Razor 组件进行单元测试。bUnit 适用于常规用途的测试框架,例如 MSTest、NUnit 和 xUnit。
## 基准测试
基准测试是一种测试方法,用于确定应用程序的性能基准。基准测试通常用于确定应用程序的性能基准,以便在应用程序的生命周期中进行性能优化。使用 `BenchmarkDotNet` 进行基准测试。