public void TestProfiledDbConnectionWithProfiledDbConnection()
        {
            var mockConnection = new Mock<DbConnection>();
            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>();
            var profiledTransaction = new ProfiledDbTransaction(mockTransaction.Object, mockDbProfiler.Object);
            mockConnection.Protected().Setup<DbTransaction>("BeginDbTransaction", isoLevel).Callback<IsolationLevel>(a => beginTransCalled = true).Returns(profiledTransaction);
            var transaction = target.BeginTransaction(isoLevel);
            Assert.AreEqual(profiledTransaction, transaction);
            Assert.IsTrue(beginTransCalled);

            // test CreateDbCommand()
            var createDbCommandCalled = false;
            var mockCommand = new Mock<IDbCommand>();
            var profiledCommand = new ProfiledDbCommand(mockCommand.Object, mockDbProfiler.Object);
            mockConnection.Protected().Setup<DbCommand>("CreateDbCommand").Callback(() => createDbCommandCalled = true).Returns(profiledCommand);
            var command = target.CreateCommand();
            Assert.AreEqual(profiledCommand, command);
            Assert.IsTrue(createDbCommandCalled);

            // test DataSource
            var dataSource = "test";
            mockConnection.Setup(c => c.DataSource).Returns(dataSource);
            Assert.AreEqual(dataSource, target.DataSource);

            // test ServerVersion
            var serverVersion = "test";
            mockConnection.Setup(c => c.ServerVersion).Returns(serverVersion);
            Assert.AreEqual(serverVersion, target.ServerVersion);

            // test Dispose()
            var disposeCalled = false;
            mockConnection.Protected().Setup("Dispose", true).Callback<bool>(a => disposeCalled = true);
            mockConnection.Setup(c => c.State).Returns(ConnectionState.Executing);
            target.Dispose();
            Assert.IsTrue(disposeCalled);
        }