, (IDbConnection, IDbTransaction, IDbCommand IDbDataAdapter), , , NSubstitute Injection Dependency.
IDbDataAdapter adapter = init.DbAdapter("command");
adapter.Connection = connection;
SqlConnection SqlCommand
using (IDbConnection connection = init.DbConnection("connection"))
{
using (IDbTransaction transaction = connection.BeginTransaction())
{
using (IDbCommand command = init.DbCommand("sproc"))
{
command.Transaction = transaction;
command.Connection = connection;
...
}
}
}
Unit test :
var connection = Substitute.For<IDbConnection>();
var command = Substitute.For<IDbCommand>();
var transaction = Substitute.For<IDbTransaction>();
var init = Substitute.For<ISqlInitializer>();
connection.Open();
connection.BeginTransaction(Arg.Any<IsolationLevel>()).Returns(transaction);
init.DbConnection(Arg.Any<string>()).Returns(connection);
init.DbCommand(Arg.Any<string>()).Returns(command);
var client = new SqlClient(init);
var result = await client.CommandMultipleAsync(new SqlConfiguration(FakeConnection, new List<string> { "testSproc1", "testSproc2" }));
Assert.AreEqual(0, result);
command.Received(2).ExecuteNonQuery();
transaction.Received(1).Commit();
, GitHub , : p https://github.com/TianyuanC/dals/blob/master/DALs.Sql/SqlClient.cs