public void NonQueryExternalTransactionAsync() { var transaction = new CommittableTransaction(); queryRunner.EnlistTransaction(transaction); int returnValue = 100; MockDatabaseFactory.DbCommand.Setup(dbc => dbc.ExecuteNonQueryAsync(It.IsAny <System.Threading.CancellationToken>())) .Returns(() => { returnValue++; return(Task.FromResult <int>(returnValue)); }); var queries = new Dictionary <int, SQLQuery>(); for (int counter = 0; counter < 10; counter++) { queries.Add(counter, new SQLQuery("insert into sometable values (" + counter + ");", SQLQueryType.NonQuery) { GroupNumber = counter }); } queryRunner.RunQuery(queries.Values); for (int counter = 0; counter < 10; counter++) { Assert.AreEqual(101 + counter, queries[counter].RowCount); } MockDatabaseFactory.DbCommand.Verify(dbc => dbc.ExecuteNonQueryAsync(It.IsAny <System.Threading.CancellationToken>()), Times.Exactly(10)); MockDatabaseFactory.DbConnection.VerifySet(dbc => dbc.ConnectionString = connectionString, Times.Exactly(1)); MockDatabaseFactory.DbConnection.Verify(dbc => dbc.Close(), Times.Exactly(0)); MockDatabaseFactory.Parameters.Verify(p => p.Add(It.IsAny <DbParameter>()), Times.Exactly(0)); MockDatabaseFactory.DbTransaction.Verify(dbt => dbt.Commit(), Times.Exactly(0)); MockDatabaseFactory.DbTransaction.Verify(dbt => dbt.Rollback(), Times.Exactly(0)); Assert.IsTrue(queryRunner.TransactionOpen); transaction.Commit(); Assert.AreEqual(1, MockDatabaseFactory.DbConnection.Object.CommitCallCount); MockDatabaseFactory.DbTransaction.Verify(dbt => dbt.Commit(), Times.Exactly(0)); MockDatabaseFactory.DbTransaction.Verify(dbt => dbt.Rollback(), Times.Exactly(0)); MockDatabaseFactory.DbConnection.Verify(dbc => dbc.Close(), Times.Exactly(1)); Assert.IsFalse(queryRunner.TransactionOpen); }