ASP.NET Core MVC / Razor页面教程-第3部分(集成测试)


1、测试解决方案中的项目

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

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

2、添加测试数据

启动模板包含ABPBookStore.TestBase项目中的ABPBookStoreTestDataBuilder类,该类创建用于运行测试的初始数据。更改ABPBookStoreTestDataSeedContributor类的内容,如下所示:

using System;
using System.Threading.Tasks;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Guids;

namespace ABPBookStore
{
    public class ABPBookStoreTestDataSeedContributor
        : IDataSeedContributor, ITransientDependency
    {
        private readonly IRepository<Book, Guid> _bookRepository;
        private readonly IGuidGenerator _guidGenerator;

        public ABPBookStoreTestDataSeedContributor(
            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
                )
            );
        }
    }
}

  • IRepository<Book, Guid>被注入并用于SeedAsync创建两个书籍实体作为测试数据。
  • IGuidGenerator被注入以创建GUID。虽然Guid.NewGuid()可以完美地进行测试,但IGuidGenerator具有其他功能,在使用实际数据库时尤其重要。

3、测试应用程序服务BookAppService

Acme.BookStore.Application.Tests项目中创建一个BookAppService_Tests命名的测试类:

using Shouldly;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Xunit;

namespace ABPBookStore
{
    public class BookAppService_Tests : ABPBookStoreApplicationTestBase
    {
        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");
        }
    }
}
Should_Get_List_Of_Books测试仅使用BookAppService.GetListAsync方法来获取并检查用户列表。

添加一个新测试以创建一本有效的新书:

public async Task Should_Create_A_Valid_Book()
        {
            //Act
            var result = await _bookAppService.CreateAsync(
                new CreateUpdateBookDto
                {
                    Name = "New test book 42",
                    Price = 10,
                    PublishDate = System.DateTime.Now,
                    Type = BookType.ScienceFiction
                }
            );

            //Assert
            result.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<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"));
        }

由于的Name值为空,因此ABP将抛出AbpValidationException

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

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试
应支付0元
点击重新获取
扫码支付

支付成功即可阅读