public void TestProfiledDbConnectionWithIDbConnection() { var mockConnection = new Mock<IDbConnection>(); var mockDbProfiler = new Mock<IDbProfiler>(); var target = new ProfiledDbConnection(mockConnection.Object, mockDbProfiler.Object); // test BeginDbTransaction() var beginTransCalled = false; var isoLevel = IsolationLevel.Chaos; var mockTransaction = new Mock<IDbTransaction>(); mockTransaction.Setup(t => t.IsolationLevel).Returns(isoLevel); mockConnection.Setup(c => c.BeginTransaction(isoLevel)).Callback<IsolationLevel>(a => beginTransCalled = true).Returns(mockTransaction.Object); var transaction = target.BeginTransaction(isoLevel); Assert.AreNotEqual(mockTransaction.Object, transaction); Assert.AreEqual(isoLevel, transaction.IsolationLevel); Assert.IsTrue(beginTransCalled); // test ChangeDatabase() var dbName = "test db"; var changeDatabaseCalled = false; mockConnection.Setup(c => c.ChangeDatabase(dbName)).Callback<string>(a => changeDatabaseCalled = true); target.ChangeDatabase(dbName); Assert.IsTrue(changeDatabaseCalled); // test Close() var closeCalled = false; mockConnection.Setup(c => c.Close()).Callback(() => closeCalled = true); target.Close(); Assert.IsTrue(closeCalled); // test ConnectionString var connStr1 = "test 1;"; var connStr2 = "test 2"; var connectionStringSet = false; mockConnection.Setup(c => c.ConnectionString).Returns(connStr1); mockConnection.SetupSet(c => c.ConnectionString = It.IsAny<string>()).Callback<string>(a => { Assert.AreEqual(connStr2, a); connectionStringSet = true; }); Assert.AreEqual(connStr1, target.ConnectionString); target.ConnectionString = connStr2; Assert.IsTrue(connectionStringSet); // test CreateDbCommand() var createDbCommandCalled = false; var mockCommand = new Mock<IDbCommand>(); var sql = "test sql"; mockCommand.Setup(c => c.CommandText).Returns(sql); mockConnection.Setup(c => c.CreateCommand()).Callback(() => createDbCommandCalled = true).Returns(mockCommand.Object); var command = target.CreateCommand(); Assert.AreNotEqual(mockCommand.Object, command); Assert.AreEqual(sql, command.CommandText); Assert.IsTrue(createDbCommandCalled); // test Database mockConnection.Setup(c => c.Database).Returns(dbName); Assert.AreEqual(dbName, target.Database); // test Open() var openCalled = false; mockConnection.Setup(c => c.Open()).Callback(() => openCalled = true); target.Open(); Assert.IsTrue(openCalled); // test State var connState = ConnectionState.Executing; mockConnection.Setup(c => c.State).Returns(connState); Assert.AreEqual(connState, target.State); // test ConnectionTimeout var timeout = 1; mockConnection.Setup(c => c.ConnectionTimeout).Returns(timeout); Assert.AreEqual(timeout, target.ConnectionTimeout); }