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)); } }