using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Util.Tests.Fakes; using Util.Tests.Infrastructure; using Util.Tests.Models; using Util.Tests.Repositories; using Util.Tests.UnitOfWorks; using Xunit; namespace Util.Data.EntityFrameworkCore.Tests; /// /// 订单仓储测试 /// 说明: /// 1. 测试string类型标识 /// 2. 测试一对多导航属性 /// public class OrderRepositoryTest : TestBase { #region 测试初始化 /// /// 仓储 /// private readonly IOrderRepository _repository; /// /// 测试初始化 /// public OrderRepositoryTest( IOrderRepository repository, ITestUnitOfWork unitOfWork ) : base( unitOfWork ) { _repository = repository; } #endregion #region 辅助方法 /// /// 添加订单 /// private async Task AddOrderAsync() { var order = OrderFakeService.GetOrder(); order.Init(); order.OrderItems.Add( CreateOrderItem() ); order.OrderItems.Add( CreateOrderItem() ); await _repository.AddAsync( order ); await UnitOfWork.CommitAsync(); UnitOfWork.ClearCache(); return order; } /// /// 创建订单项 /// private OrderItem CreateOrderItem() { var item = OrderItemFakeService.GetOrderItem(); item.Init(); return item; } #endregion #region Single /// /// 测试查找单个实体 /// [Fact] public async Task TestSingle_1() { //添加实体 var entity = await AddOrderAsync(); //查找单个实体 var result = await _repository.SingleAsync( t => t.Id == entity.Id ); //验证 Assert.Empty( result.OrderItems ); } /// /// 测试查找单个实体 - 使用Include包含子实体集合 /// [Fact] public async Task TestSingle_2() { //添加实体 var entity = await AddOrderAsync(); //查找单个实体 var result = await _repository.SingleAsync( t => t.Id == entity.Id, queryable => queryable.Include( t => t.OrderItems ) ); //验证 Assert.Equal( 2, result.OrderItems.Count ); } #endregion #region SingleAsync /// /// 测试查找单个实体 /// [Fact] public async Task TestSingleAsync_1() { //添加实体 var entity = await AddOrderAsync(); //查找单个实体 var result = await _repository.SingleAsync( t => t.Id == entity.Id ); //验证 Assert.Empty( result.OrderItems ); } /// /// 测试查找单个实体 - 使用Include包含子实体集合 /// [Fact] public async Task TestSingleAsync_2() { //添加实体 var entity = await AddOrderAsync(); //查找单个实体 var result = await _repository.SingleAsync( t => t.Id == entity.Id, queryable => queryable.Include( t => t.OrderItems ) ); //验证 Assert.Equal( 2, result.OrderItems.Count ); } #endregion }