public void InterfaceIsGenerated()
        {
            var connection = Connection();

            // make sure that we can create an interface
            ITest1 i = connection.As <ITest1>();

            Assert.IsNotNull(i);

            // make sure that the wrapper is still a connection
            DbConnection c = i as DbConnection;

            Assert.IsNotNull(c);

            // let's call us some methods
            i.ExecuteSomething();
            i.ExecuteSomethingWithParameters(5, "6");
            Assert.AreEqual(9, i.ExecuteSomethingScalar(9));
            i.SingleObject().Verify(false);
            Assert.IsNull(i.SingleObjectWithNoData());
            Assert.AreEqual(2, i.QueryValue(9).Count());
            ParentTestData.Verify(i.QueryObject(), false);
            Assert.AreEqual(11, i.ObjectAsParameter(new ParentTestData()
            {
                ParentX = 11
            }));
            Assert.AreEqual(11, i.ObjectListAsParameter(new[] { new ParentTestData()
                                                                {
                                                                    ParentX = 11
                                                                } }).First());

            var results = i.QueryResults(7);

            ParentTestData.Verify(results.Set1, false);
            Assert.AreEqual(7, results.Set2.First());

            // let's call them asynchronously
            i.ExecuteSomethingAsync().Wait();
            i.ExecuteSomethingWithParametersAsync(5, "6").Wait();
            Assert.AreEqual(9, i.ExecuteSomethingScalarAsync(9).Result);
            i.SingleObjectAsync().Result.Verify(false);
            Assert.AreEqual(2, i.QueryValueAsync(9).Result.Count());
            ParentTestData.Verify(i.QueryObjectAsync().Result, false);
            Assert.AreEqual(11, i.ObjectAsParameterAsync(new ParentTestData()
            {
                ParentX = 11
            }).Result);
            Assert.AreEqual(11, i.ObjectListAsParameterAsync(new[] { new ParentTestData()
                                                                     {
                                                                         ParentX = 11
                                                                     } }).Result.First());

            results = i.QueryResultsAsync(7).Result;
            ParentTestData.Verify(results.Set1, false);
            Assert.AreEqual(7, results.Set2.First());

            // inline SQL!
            Assert.AreEqual("42", i.InlineSql(42));
            Assert.AreEqual(99, i.InlineSqlProcOverride(99));
            Assert.AreEqual(98, i.InlineSqlWithSchema(98));
            Assert.AreEqual(98, connection.As <ITestWithSqlAttribute>().ExecuteSomethingScalar(98));
        }