コード例 #1
0
        public async Task AddOrdersAsyncTest()
        {
            // Setup
            var savedOrders = new List <SalesOrder>();

            _mockContext.Setup(x => x.ExecuteScalarAsync <int>(_mockConnection.Object, It.IsAny <string>(), It.IsAny <object>(),
                                                               _mockTransaction.Object, null, null))
            .ReturnsAsync <IDbConnection, string, object, IDbTransaction, int?, CommandType?, IDbContext, int>(
                (conn, sql, param, tran, timeout, cmdType) =>
            {
                var order = (SalesOrder)param;
                savedOrders.Add(order);
                return(order.SalesOrderId);
            })
            .Verifiable();
            _mockContext.Setup(x => x.ExecuteAsync(_mockConnection.Object, It.IsAny <string>(), It.IsAny <object>(),
                                                   _mockTransaction.Object, null, null))
            .ReturnsAsync(10)
            .Verifiable();

            var repository = new DbRepository(_mockContext.Object);
            var orderIds   = new List <int> {
                1, 2
            };
            var orders = orderIds.Select(x =>
                                         new SalesOrder
            {
                SalesOrderId = x,
                OrderItems   = new List <SalesOrderItem> {
                    new SalesOrderItem {
                        SalesOrderDetailId = x * 100
                    }
                }
            })
                         .ToList();

            // Act
            var result = await repository.AddOrdersAsync(orders);

            // Verify
            _mockContext.Verify();
            Assert.AreEqual(orderIds, result);
            var jsonOrders      = JsonConvert.SerializeObject(orders);
            var jsonSavedOrders = JsonConvert.SerializeObject(savedOrders);

            Assert.AreEqual(jsonOrders, jsonSavedOrders);
            foreach (var order in savedOrders)
            {
                Assert.IsTrue(order.OrderItems.All(x => x.SalesOrderId == order.SalesOrderId));
            }
        }