文章目录

  • 关于本教程
    • 下载源代码
  • 在解决方案中测试项目
  • 添加测试数据
  • 测试BookAppService
  • 下一部分

关于本教程

本教程基于版本3.1

在本教程系列中,您将构建一个名为Acme.BookStore的基于ABPWeb应用程序。该应用程序用于管理书籍及其作者的列表。它是使用以下技术开发的:

  • 实体框架核心作为ORM提供者。
  • MVC/Razor页面作为UI框架。

本教程分为以下部分:

第1部分:创建服务器端

第2部分:图书列表页面

第3部分:创建、更新和删除书籍

第4部分:集成测试(此部分)

第5部分:授权

第6部分:作者:领领域层

第7部分:作者:数据库集成

第8部分:作者:应用程序层

第9部分:作者:用户界面

第10部分:书与作者的关系

下载源代码

MVC (Razor Pages) UI with EF Core

在解决方案中测试项目

本部分介绍服务器端测试。解决方案中有几个测试项目:

每个项目都用于测试相关项目。测试项目使用以下库进行测试:

  • Xunit作为主要测试框架。

  • Shoudly作为断言库。

  • NSubstitute作为模拟库。

测试项目被配置为使用内存中的SQLite作为数据库。创建一个单独的数据库实例并播种(使用数据种子系统),为每个测试准备一个新的数据库。

添加测试数据

如果您已按照第一部分中的说明创建了数据种子贡献者,则相同的数据将在您的测试中可用。因此,您可以跳过此部分。如果尚未创建种子贡献者,则可以使用BookStoreTestDataSeedContributor来为要在以下测试中使用的相同数据注入种子。

测试BookAppService

添加一个新的测试类,在Acme.BookStore.Application.Tests项目的Books命名控件(文件夹)中命名为BookAppService_Tests

using System.Threading.Tasks;
using Shouldly;
using Volo.Abp.Application.Dtos;
using Xunit;namespace Acme.BookStore.Books
{ public class BookAppService_Tests : BookStoreApplicationTestBase{private readonly IBookAppService _bookAppService;public BookAppService_Tests(){_bookAppService = GetRequiredService<IBookAppService>();}[Fact]public async Task Should_Get_List_Of_Books(){//Actvar result = await _bookAppService.GetListAsync(new PagedAndSortedResultRequestDto());//Assertresult.TotalCount.ShouldBeGreaterThan(0);result.Items.ShouldContain(b => b.Name == "1984");}}
}
  • Should_Get_List_Of_Books测试只是简单的使用BookAppService.GetListAsync方法来获取和检查书籍列表。

  • 我们可以安全地检查“1984”这本书的名称,因为我们知道这本书已经存在于数据库中,因为我们已经将其添加到种子数据中。

将新的测试方法添加到创建新有效书的BookAppService_Tests类中:

[Fact]
public async Task Should_Create_A_Valid_Book()
{//Actvar result = await _bookAppService.CreateAsync(new CreateUpdateBookDto{Name = "New test book 42",Price = 10,PublishDate = System.DateTime.Now,Type = BookType.ScienceFiction});//Assertresult.Id.ShouldNotBe(Guid.Empty);result.Name.ShouldBe("New test book 42");
}

添加一个尝试创建无效书籍并失败的新测试:

[Fact]
public async Task Should_Not_Create_A_Book_Without_Name()
{var exception = await Assert.ThrowsAsync<AbpValidationException>(async () =>{await _bookAppService.CreateAsync(new CreateUpdateBookDto{Name = "",Price = 10,PublishDate = DateTime.Now,Type = BookType.ScienceFiction});});exception.ValidationErrors.ShouldContain(err => err.MemberNames.Any(mem => mem == "Name"));
}
  • 由于Name的值为空,因此ABP将抛出AbpValidationException异常。

最终的测试类应如下所示:

using System;
using System.Linq;
using System.Threading.Tasks;
using Shouldly;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Validation;
using Xunit;namespace Acme.BookStore.Books
{ public class BookAppService_Tests : BookStoreApplicationTestBase{private readonly IBookAppService _bookAppService;public BookAppService_Tests(){_bookAppService = GetRequiredService<IBookAppService>();}[Fact]public async Task Should_Get_List_Of_Books(){//Actvar result = await _bookAppService.GetListAsync(new PagedAndSortedResultRequestDto());//Assertresult.TotalCount.ShouldBeGreaterThan(0);result.Items.ShouldContain(b => b.Name == "1984");}[Fact]public async Task Should_Create_A_Valid_Book(){//Actvar result = await _bookAppService.CreateAsync(new CreateUpdateBookDto{Name = "New test book 42",Price = 10,PublishDate = System.DateTime.Now,Type = BookType.ScienceFiction});//Assertresult.Id.ShouldNotBe(Guid.Empty);result.Name.ShouldBe("New test book 42");}[Fact]public async Task Should_Not_Create_A_Book_Without_Name(){var exception = await Assert.ThrowsAsync<AbpValidationException>(async () =>{await _bookAppService.CreateAsync(new CreateUpdateBookDto{Name = "",Price = 10,PublishDate = DateTime.Now,Type = BookType.ScienceFiction});});exception.ValidationErrors.ShouldContain(err => err.MemberNames.Any(mem => mem == "Name"));}}
}

打开“测试资源管理器”窗口(如果看不到,请使用“测试”->“窗体”->“测试资源管理器”菜单),然后运行所有测试:

恭喜,绿色图标表示测试已成功通过!

下一部分

请参阅本教程的下一部分。

Abp vnext Web应用程序开发教程 4 —— 集成测试相关推荐

  1. Abp vnext Web应用程序开发教程 10 —— 书与作者的关系

    文章目录 关于本教程 下载源代码 介绍 向书实体添加关系 数据库和数据迁移 更新EF核心映射 添加新的EF核心迁移 更改数据播种器 应用层 数据传输对象 IBookAppService BookApp ...

  2. Abp vnext Web应用程序开发教程 9 —— 作者:用户界面

    文章目录 关于本教程 下载源代码 介绍 图书列表页面 Index.cshtml IndexModel.cshtml.cs Index.js 本地化 添加到主菜单 运行应用程序 创建模态 CreateM ...

  3. Abp vnext Web应用程序开发教程 8 —— 作者:应用程序层

    文章目录 关于本教程 下载源代码 介绍 IAuthorAppService AuthorDto GetAuthorListDto CreateAuthorDto UpdateAuthorDto Aut ...

  4. Abp vnext Web应用程序开发教程 7 —— 作者:数据库集成

    文章目录 关于本教程 下载源代码 介绍 数据库上下文 创建一个新的数据库迁移 实现IAuthorRepository 下一部分 关于本教程 本教程基于版本3.1 在本教程系列中,您将构建一个名为Acm ...

  5. Abp vnext Web应用程序开发教程 6 —— 作者:领域层

    文章目录 关于本教程 下载源代码 介绍 作者实体 AuthorManager:领域服务 IAuthorRepository 结论 下一部分 关于本教程 本教程基于版本3.1 在本教程系列中,您将构建一 ...

  6. Abp vnext Web应用程序开发教程 3 —— 创建、更新和删除书籍

    文章目录 关于本教程 下载源代码 创建新书 创建模态表单 添加"新书"按钮 更新书 EditModal.cshtml.cs 从BookDto映射到CreateUpdateBookD ...

  7. Abp vnext Web应用程序开发教程 1 —— 创建服务器端

    文章目录 关于本教程 下载源代码 创建解决方案 创建书籍实体 BookType枚举 将图书实体添加到DbContext 将图书实体映射到数据库表 添加数据库迁移 添加样本种子数据 更新数据库 创建应用 ...

  8. Abp vnext Web应用程序开发教程 2 —— 图书列表页面

    文章目录 关于本教程 下载源代码 动态JavaScript代理 在开发者控制台中进行测试 本地化 创建书籍页面 将书籍页面添加到主菜单 图书列表 运行最终应用程序 下一部分 关于本教程 本教程基于版本 ...

  9. Abp vnext Web应用程序开发教程 5 —— 授权

    文章目录 关于本教程 下载源代码 权限 权限名称 权限定义 权限管理界面 授权 应用层和HTTP API Razor页面 JavaScript端 菜单项 下一部分 关于本教程 本教程基于版本3.1 在 ...

最新文章

  1. iOS OC和Swift混编
  2. agentzh 的 Nginx 教程(版本 2015.03.19) 第一篇
  3. mysql获取当月数据_MySQL中获取天、周、月等数据
  4. oracle 表更新表,Oracle 更新表(另一张表)
  5. Mysql主主同步详细操作过程
  6. 使用 IAsyncResult 进行 .NET 异步编程
  7. 斯威夫特山地车_斯威夫特枚举
  8. 文字旋转_如何制作抖音文字旋转视频?推荐这款超火的抖音文字动画制作神器...
  9. 创建win10介质进度为0_win10介质创建工具(media creation tool)下载_win10介质创建工具(media creation tool)官方下载-太平洋下载中心...
  10. 基于 MPC 控制算法的自适应巡航系统的研究
  11. 人体模型 java代码_java3d人体模型.doc
  12. 孔夫子旧书网接口:实现输入ISBN获取图书信息
  13. ATN项目(智能矩阵Atmatrix)是否能做到人工智能界的桥梁,从而改变世界?
  14. 什么是软件危机?它有哪些典型表现?为什么会出现软件为危机?
  15. 阿里P6级别Java程序员月薪多少?阿里认证员工给出答案
  16. 正交试验设计的基本步骤
  17. 萨提亚亲密关系(摘抄)
  18. 洛谷1067 多项式输出 解题报告
  19. 松柏先生:制胜的一拳靠的不是运气,而是洞察力!
  20. java日期与时间戳相互转换大全

热门文章

  1. sql中exec是什么意思_SQL 中为什么经常要加NOLOCK?
  2. 安卓bmi项目_搭载安卓系统的智能健康一体机:上禾SH-V20
  3. new string(abc)创建了几个对象_面试题系列第2篇:new String()创建几个对象?有你不知道的...
  4. oracle一列有多个约束,在oracle中创建unique唯一约束(单列和多列)
  5. 传统春节海报设计没有思路?
  6. APP设计|搜索页面设计灵感
  7. 圣诞节插画素材|设计师再忙也要看一看,没准可以帮助到你!
  8. 【设计素材】表格数据形平面海报素材
  9. 设计师需要收藏|一起来看看UI设计的配色专辑
  10. 新高考改革选计算机专业要学什么,2020高考改革后考生如何选科与选专业?