public void Construct()
        {
            var implementationMock = new Mock<IAlternateMethod>();
            var loggerMock = new Mock<ILogger>();

            var adapter = new AlternateTypeToCastleInterceptorAdapter(implementationMock.Object, loggerMock.Object, new Mock<IMessageBroker>().Object, new Mock<IProxyFactory>().Object, () => new ExecutionTimer(Stopwatch.StartNew()), () => RuntimePolicy.On);

            Assert.Equal(implementationMock.Object, adapter.Implementation);
            Assert.Equal(loggerMock.Object, adapter.Logger);
        }
        public void PassThroughMethodToImplement()
        {
            var expected = GetType().GetMethods().First();
            var implementationMock = new Mock<IAlternateMethod>();
            implementationMock.Setup(i => i.MethodToImplement).Returns(expected);
            var loggerMock = new Mock<ILogger>();

            var adapter = new AlternateTypeToCastleInterceptorAdapter(implementationMock.Object, loggerMock.Object, new Mock<IMessageBroker>().Object, new Mock<IProxyFactory>().Object, () => new ExecutionTimer(Stopwatch.StartNew()), () => RuntimePolicy.On);

            Assert.Equal(expected, adapter.MethodToImplement);
        }
        public void Intercept()
        {
            var implementationMock = new Mock<IAlternateMethod>();
            var loggerMock = new Mock<ILogger>();

            var adapter = new AlternateTypeToCastleInterceptorAdapter(implementationMock.Object, loggerMock.Object, new Mock<IMessageBroker>().Object, new Mock<IProxyFactory>().Object, () => new ExecutionTimer(Stopwatch.StartNew()), () => RuntimePolicy.On);

            var invocationMock = new Mock<IInvocation>();

            adapter.Intercept(invocationMock.Object);

            implementationMock.Verify(i => i.NewImplementation(It.IsAny<IAlternateMethodContext>()));
        }