ABP(8) - 測試專案 - 官方教程掃盲貼之利用測試專案來回歸測試 (詳細解說)
阿新 • • 發佈:2020-09-02
1 目標
- 1.1 學會使用測試專案
- 1.2 測試case的使用
2 新增測試資料,修改Acme.BookStore.TestBase
專案中的BookStoreTestDataSeedContributor
類,它建立一些資料來執行測試. 更改BookStoreTestDataSeedContributor
類如下所示:
using System; using System.Threading.Tasks; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.Domain.Repositories; using Volo.Abp.Guids; namespace Acme.BookStore { public class BookStoreTestDataSeedContributor : IDataSeedContributor, ITransientDependency { private readonly IRepository<Book, Guid> _bookRepository; private readonly IGuidGenerator _guidGenerator; public BookStoreTestDataSeedContributor( IRepository<Book, Guid> bookRepository, IGuidGenerator guidGenerator) { _bookRepository = bookRepository; _guidGenerator = guidGenerator; } public async Task SeedAsync(DataSeedContext context) { await _bookRepository.InsertAsync( new Book(id: _guidGenerator.Create(), name: "Test book 1", type: BookType.Fantastic, publishDate: new DateTime(2015, 05, 24), price: 21 ) ); await _bookRepository.InsertAsync( new Book(id: _guidGenerator.Create(), name: "Test book 2", type: BookType.Science, publishDate: new DateTime(2014, 02, 11), price: 15 ) ); } } }
3 測試 BookAppService
- 3.1 在
Acme.BookStore.Application.Tests
專案中建立一個名叫BookAppService_Tests
的測試類
using System; using System.Linq; using System.Threading.Tasks; using Xunit; using Shouldly; using Volo.Abp.Application.Dtos; using Volo.Abp.Validation; using Microsoft.EntityFrameworkCore.Internal; namespace Acme.BookStore { public class BookAppService_Tests : BookStoreApplicationTestBase { private readonly IBookAppService _bookAppService; public BookAppService_Tests() { _bookAppService = GetRequiredService<IBookAppService>(); } [Fact] public async Task Should_Get_List_Of_Books() { //Act var result = await _bookAppService.GetListAsync( new PagedAndSortedResultRequestDto() ); //Assert result.TotalCount.ShouldBeGreaterThan(0); result.Items.ShouldContain(b => b.Name == "Test book 1"); } } }
- 3.2 在
Acme.BookStore.Application.Tests
專案中建立一個名叫BookAppService_Tests
的測試類
[Fact] public async Task Should_Create_A_Valid_Book() { //Act var result = await _bookAppService.CreateAsync( new CreateUpdateBookDto { Name = "New test book 42", Price = 10, PublishDate = DateTime.Now, Type = BookType.ScienceFiction } ); //Assert result.Id.ShouldNotBe(Guid.Empty); result.Name.ShouldBe("New test book 42"); }
- 3.3 新增測試方法,用以測試建立一個非法book實體失敗的場景
[Fact]
public async Task Should_Not_Create_A_Book_Without_Name()
{
var exception = await Assert.ThrowsAsync<Volo.Abp.Validation.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"));
}