NeuCharFramework (NCF)
  • NCF - NeuCharFramework
  • 项目

    • 准备
    • 基础库源码分析
    • 动态WebApiEngine
    • 部署
    • MCP (Model Context Protocol) 模块
    • Senparc.AI
  • 帮助

    • 在线资源
    • 问答社区
    • QQ群(147054579)
    • Senparc微信SDK
  • Gitee
  • GitHub
  • English
  • 简体中文
GitHub
  • NCF - NeuCharFramework
  • 项目

    • 准备
    • 基础库源码分析
    • 动态WebApiEngine
    • 部署
    • MCP (Model Context Protocol) 模块
    • Senparc.AI
  • 帮助

    • 在线资源
    • 问答社区
    • QQ群(147054579)
    • Senparc微信SDK
  • Gitee
  • GitHub
  • English
  • 简体中文
GitHub
  • NCF 概要

    • NCF - NeuCharFramework
    • 关于 NCF
    • 环境要求
    • 前后端分离模式
    • Xncf模块简介
  • 准备开发

    • 获取 NCF 模板源码
    • 使用 Visual Studio 运行 NCF
    • 使用 CLI 运行 NCF
    • 安装
    • 管理员登录
    • 管理员后台
    • appsettings.json 配置
    • 模块管理
    • 获取文档
  • 配置

    • 入口文件
    • 数据库设置
    • appsettings.json 配置
    • Docker
    • Dapr
    • 配置多租户
    • Redis 缓存
  • 模块化开发

    • NCF 模块化开发思想
    • Xncf 的构成
    • 创建第一个 Xncf 模块
    • Xncf 模块 Sample 详解
    • 实现自己的业务逻辑
    • 更新 Xncf 模块
    • 模块之间如何调用
    • 发布Xncf 模块到nuget.org
    • 更新基础库
    • Xncf 模块开发
    • 嵌入静态资源文件到NCF中
    • 发布本地Nuget包
    • 进阶
  • 数据库

    • 数据库设置
    • 多数据库支持
    • 指定数据库
    • 更新 Senparc.Service 项目的数据库迁移文件(Migrations)
    • 多数据库原理
    • 数据库停机坪(DatabasePlant)
    • 停机坪操作数据库迁移和更新
  • 单元测试

    • NCF 单元测试介绍
    • 开始开发
    • 进阶
    • 附录
  • Q&A

    • NCF名词解释
    • NCF常见问题
  • 新发布

    • 新功能
    • 升级指导
    • 日志

开始开发

准备工作

NCF 单元测试基于 .NET 官方的单元测试框架(MsTest),因此您并不需要储备任何附加的技能。因此,您只需要安装 .NET 常规开发环境(.NET SDK)即可进行单元测试的开发和运行。

创建单元测试项目

您可以使用常规命令行的方式或 Visual Studio 中的单元测试项目模板来创建单元测试项目。

以 NCF 项目的 Admin 模块为例,您可以使用以下命令行来创建单元测试项目:

dotnet new mstest -n Senparc.Areas.Admin.Tests

为项目添加引用

单元测试项目需要引用被测试的项目,如当前示例中的 Senparc.Areas.Admin 项目:

<ItemGroup>
<ProjectReference Include="..\..\Senparc.Areas.Admin\Senparc.Areas.Admin.csproj" />
</ItemGroup>

其次,我们需要引用 NCF 的单元测试基基础支撑库:

dotnet add package Senparc.Ncf.UnitTestExtension

完成后可以看到 Senparc.Areas.Admin.Tests.csproj 中已经添加了相关的代码(您也可以手动添加),如:

<PackageReference Include="Senparc.Ncf.UnitTestExtension" Version="0.1.1.2-preview1" />

创建单元测试文件

您可以按照常规单元测试的规则,创建一个单元测试文件,如:

[TestClass]
public class AdminUserInfoServiceTests : BaseNcfUnitTest
{
}

BaseNcfUnitTest 是 NCF 提供的单元测试基类,来自于上一步安装的 Senparc.Ncf.UnitTestExtension 包。

为了给整个 Service 提供公共的对象,我们可以添加一个构造函数和私有变量:

AdminUserInfoService adminUserInfoService;
public AdminUserInfoServiceTests()
{
    //创建 Repository 基类的 Mock 对象
    var mockBaseRepo = base.GetRespository<AdminUserInfo>().MockRepository;
    //由于 AdminUserInfoService 创建了专门的接口,从基类自动映射相关扩展接口,如果直接使用 IClientRepositoryBase<AdminUserInfo> 操作数据,则这一句可以省略
    var mockAdminUserInfoRepo = base.CreateMockForExtendedInterface<IAdminUserInfoRepository, IClientRepositoryBase<AdminUserInfo>>(mockBaseRepo);
    //生成 AdminUserInfoService 类
    adminUserInfoService = new AdminUserInfoService(mockAdminUserInfoRepo.Object, null, base._serviceProvider);
}

上述方法具有通用性,可举一反三,用于几乎所有 Service 和实体类

接下来我们就可以针对 AdminUserInfoService 中的所有方法进行测试,例如:

[TestMethod]
public async Task CreateAdminUserInfoTest()
{
    var adminUserInfoDto = new CreateOrUpdate_AdminUserInfoDto()
    {
        UserName = "NCF_Admin",
        Password = "abcd",
    };

    var obj = await adminUserInfoService.CreateAdminUserInfoAsync(adminUserInfoDto);

    Assert.IsNotNull(obj);
    Assert.AreEqual(adminUserInfoDto.UserName, obj.UserName);

    var storedPassword = obj.GetSHA512Password(adminUserInfoDto.Password, obj.PasswordSalt);
    Assert.AreEqual(storedPassword, obj.Password);
}

上述代码比较好理解:

  • adminUserInfoDto 创建了一个用于创建管理员的 DTO 对象
  • adminUserInfoService.CreateAdminUserInfoAsync() 方法是本单元测试的目标,用于实现管理员添加
  • Assert 方法验证了期望结果

运行单元测试,显示测试通过:

在 GitHub 上编辑此页
上次更新:
贡献者: MLTechnology
Prev
NCF 单元测试介绍
Next
进阶