多情的剪刀 · 捕获报表视图展示 | Microsoft ...· 2 月前 · |
稳重的钥匙扣 · qt中实现sftp功能 - CSDN文库· 3 月前 · |
酷酷的日光灯 · [vlc-devel] [PATCH] ...· 3 月前 · |
仗义的沙滩裤 · 樱花电影大全免费观看-维修工人的绝遇中文字三 ...· 4 月前 · |
豪气的薯片 · 孟美岐澄清点评周传雄事件,出道后事业不见多火 ...· 5 月前 · |
你可以参考 ASP.NET Core集成测试文档 了解ASP.NET Core集成测试的详细内容. 本文档解释了ABP框架提供的附加测试基础设施.
应用程序启动模板的
.Web
项目其中包含应用程序的UI视图/页面/组件, 并提供
.Web.Tests
项目来测试这些内容.
假设你已经创建了一个名为
Issues.cshtml
的Razor页面, 包含以下内容;
Issues.cshtml.cs
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.RazorPages;
using MyProject.Issues;
namespace MyProject.Web.Pages
public class IssuesModel : PageModel
public List<IssueDto> Issues { get; set; }
private readonly IIssueAppService _issueAppService;
public IssuesModel(IIssueAppService issueAppService)
_issueAppService = issueAppService;
public async Task OnGetAsync()
Issues = await _issueAppService.GetListAsync();
Issues.cshtml
@page
@model MyProject.Web.Pages.IssuesModel
<h2>Issue List</h2>
<table id="IssueTable" class="table">
<thead>
<th>Issue</th>
<th>Closed?</th>
</thead>
<tbody>
@foreach (var issue in Model.Issues)
<td>@issue.Title</td>
@if (issue.IsClosed)
<span>Closed</span>
<span>Open</span>
</tbody>
</table>
本页仅创建一个包含issue的表格:
你可以在.Web.Tests
项目中编写一个测试类如下所示:
using System.Threading.Tasks;
using HtmlAgilityPack;
using Shouldly;
using Xunit;
namespace MyProject.Pages
public class Issues_Tests : MyProjectWebTestBase
[Fact]
public async Task Should_Get_Table_Of_Issues()
// Act
var response = await GetResponseAsStringAsync("/Issues");
//Assert
var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(response);
var tableElement = htmlDocument.GetElementbyId("IssueTable");
tableElement.ShouldNotBeNull();
var trNodes = tableElement.SelectNodes("//tbody/tr");
trNodes.Count.ShouldBeGreaterThan(0);
GetResponseAsStringAsync
是一个快捷方法, 它来自执行HTTP GET请求的基类, 检查生成的HTTP状态是否为200
, 并将响应作为string
返回.
你可以使用Client
对象(类型为HttpClient
)对服务器执行任何类型的请求, 并读取响应.GetResponseAsStringAsync
只是一种快捷方法.
本例使用HtmlAgilityPack库来解析传入的HTML并测试它是否包含issue表格.
本例假设的数据库中存在一些初始issue. 请参阅测试文档的种子数据部分, 了解如何设置种子数据, 以便可以假定数据库中有一些可用的初始数据.
控制器测试
测试控制器也不例外. 只需使用正确的URL向服务器执行请求, 获取响应并做出断言.
如果控制器返回一个视图, 你可以使用类似的代码来测试返回的HTML. 参见上面的Razor页面示例.
如果控制器返回对象结果, 则可以使用GetResponseAsObjectAsync
方法.
假设你有一个如下定义的控制器:
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using MyProject.Issues;
using Volo.Abp.AspNetCore.Mvc;
namespace MyProject.Web.Controllers
[Route("api/issues")]
public class IssueController : AbpController
private readonly IIssueAppService _issueAppService;
public IssueController(IIssueAppService issueAppService)
_issueAppService = issueAppService;
[HttpGet]
public async Task<List<IssueDto>> GetAsync()
return await _issueAppService.GetListAsync();
你可以编写测试代码来调用API并获得结果:
using System.Collections.Generic;
using System.Threading.Tasks;
using MyProject.Issues;
using Shouldly;
using Xunit;
namespace MyProject.Pages
public class Issues_Tests : MyProjectWebTestBase
[Fact]
public async Task Should_Get_Issues_From_Api()
var issues = await GetResponseAsObjectAsync<List<IssueDto>>("/api/issues");
issues.ShouldNotBeNull();
issues.Count.ShouldBeGreaterThan(0);
测试JavaScript代码
ABP框架不提供任何基础设施来测试JavaScript代码. 你可以使用任何测试框架和工具来测试JavaScript代码.
测试基础设施
Volo.Abp.AspNetCore.TestBase 提供了集成到ABP框架和ASP.NET Core的测试基础设施.
Volo.Abp.AspNetCore.TestBase 已经安装在 .Web.Tests
项目中.
此包提供的AbpWebApplicationFactoryIntegratedTest
作为派生测试类的基类. 它继承自ASP.NET Core提供的WebApplicationFactory类。
上面使用的MyProjectWebTestBase
继承自AbpWebApplicationFactoryIntegratedTest
, 因此我们间接继承了AbpWebApplicationFactoryIntegratedTest
.
ASP.NET Core 中的集成测试
总览/服务器端测试
多情的剪刀 · 捕获报表视图展示 | Microsoft Learn 2 月前 |
稳重的钥匙扣 · qt中实现sftp功能 - CSDN文库 3 月前 |