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>()));
        }