private GlimpseRuntimeTester(GlimpseConfiguration configuration, Mock<IFrameworkProvider> frameworkProviderMock, Mock<ResourceEndpointConfiguration> endpointConfigMock) : base(configuration)
        {
            FrameworkProviderMock = frameworkProviderMock;
            EndpointConfigMock = endpointConfigMock;
            HttpRequestStoreMock = new Mock<IDataStore>();
            TabMock = new Mock<ITab>().Setup();
            InspectorMock = new Mock<IInspector>();
            SerializerMock = new Mock<ISerializer>();
            PersistenceStoreMock = new Mock<IPersistenceStore>();
            LoggerMock = new Mock<ILogger>();
            ResourceMock = new Mock<IResource>();
            ResourceResultMock = new Mock<IResourceResult>();
            RuntimePolicyMock = new Mock<IRuntimePolicy>();
            RuntimePolicyMock.Setup(v => v.Execute(It.IsAny<IRuntimePolicyContext>())).Returns(RuntimePolicy.On);
            RuntimePolicyMock.Setup(v => v.ExecuteOn).Returns(RuntimeEvent.Initialize);
            RequestMetadataMock = new Mock<IRequestMetadata>();
            RequestMetadataMock.Setup(r => r.RequestHttpMethod).Returns("GET");
            RequestMetadataMock.Setup(r => r.RequestIsAjax).Returns(true);
            RequestMetadataMock.Setup(r => r.RequestUri).Returns("http://localhost");
            RequestMetadataMock.Setup(r => r.ResponseStatusCode).Returns(200);
            RequestMetadataMock.Setup(r => r.ResponseContentType).Returns(@"text\html");
            RequestMetadataMock.Setup(r => r.GetCookie(Constants.ClientIdCookieName)).Returns(@"Some Client");
            RequestMetadataMock.Setup(r => r.GetCookie(Constants.UserAgentHeaderName)).Returns(@"FireFox");
            RequestMetadataMock.Setup(r => r.GetHttpHeader(Constants.HttpRequestHeader)).Returns(Guid.NewGuid().ToString());
            StaticScriptMock = new Mock<IStaticClientScript>();
            StaticScriptMock.Setup(ss => ss.Order).Returns(ScriptOrder.ClientInterfaceScript);
            StaticScriptMock.Setup(ss => ss.GetUri(Version)).Returns("http://localhost/static");
            DynamicScriptMock = new Mock<IDynamicClientScript>();
            DynamicScriptMock.Setup(ds => ds.Order).Returns(ScriptOrder.RequestDataScript);
            DynamicScriptMock.Setup(ds => ds.GetResourceName()).Returns("aResource");
            EncoderMock = new Mock<IHtmlEncoder>();


            FrameworkProviderMock.Setup(fp => fp.RequestMetadata).Returns(RequestMetadataMock.Object);

            configuration.Serializer = SerializerMock.Object;
            configuration.PersistenceStore = PersistenceStoreMock.Object;
            configuration.Logger = LoggerMock.Object;
            configuration.DefaultRuntimePolicy = RuntimePolicy.On;
            configuration.HtmlEncoder = EncoderMock.Object;

            Configuration = configuration;
        }
        public void Construct()
        {
            var providerMock = new Mock<IFrameworkProvider>();
            var endpointConfogMock = new Mock<ResourceEndpointConfiguration>();
            var clientScriptsStub = new List<IClientScript>();
            var loggerMock = new Mock<ILogger>();
            var encoderMock = new Mock<IHtmlEncoder>();
            var storeMock = new Mock<IPersistenceStore>();
            var inspectorsStub = new LinkedList<IInspector>();
            var resourcesStub = new LinkedList<IResource>();
            var serializerMock = new Mock<ISerializer>();
            var tabsStub = new List<ITab>();
            var displaysStub = new List<IDisplay>();
            var policiesStub = new List<IRuntimePolicy>();
            var defaultResourceMock = new Mock<IResource>();
            var factoryMock = new Mock<IProxyFactory>();
            var brokerMock = new Mock<IMessageBroker>();
            Func<IExecutionTimer> timerStrategy = () => new ExecutionTimer(Stopwatch.StartNew());
            Func<RuntimePolicy> runtimePolicyStrategy = () => RuntimePolicy.On;

            var config = new GlimpseConfiguration(providerMock.Object, endpointConfogMock.Object, clientScriptsStub, loggerMock.Object, RuntimePolicy.On, encoderMock.Object, storeMock.Object, inspectorsStub, resourcesStub, serializerMock.Object, 
                tabsStub, displaysStub, policiesStub, defaultResourceMock.Object, factoryMock.Object, brokerMock.Object, "~/Glimpse.axd", timerStrategy, runtimePolicyStrategy);

            Assert.Equal(providerMock.Object, config.FrameworkProvider);
            Assert.Equal(endpointConfogMock.Object, config.ResourceEndpoint);
            Assert.Equal(clientScriptsStub, config.ClientScripts);
            Assert.Equal(loggerMock.Object, config.Logger);
            Assert.Equal(encoderMock.Object, config.HtmlEncoder);
            Assert.Equal(storeMock.Object, config.PersistenceStore);
            Assert.Equal(inspectorsStub, config.Inspectors);
            Assert.Equal(resourcesStub, config.Resources);
            Assert.Equal(serializerMock.Object, config.Serializer);
            Assert.Equal(tabsStub, config.Tabs);
            Assert.Equal(displaysStub, config.Displays);
            Assert.Equal(policiesStub, config.RuntimePolicies);
            Assert.Equal(defaultResourceMock.Object, config.DefaultResource);
            Assert.Equal(factoryMock.Object, config.ProxyFactory);
            Assert.Equal(brokerMock.Object, config.MessageBroker);
            Assert.Equal(timerStrategy, config.TimerStrategy);
            Assert.Equal(runtimePolicyStrategy, config.RuntimePolicyStrategy);
            
        }
        public static GlimpseRuntimeTester Create()
        {
            var frameworkProviderMock = new Mock<IFrameworkProvider>().Setup();
            var endpointConfigMock = new Mock<ResourceEndpointConfiguration>();
            var loggerMock = new Mock<ILogger>();
            var clientScripts = new ReflectionDiscoverableCollection<IClientScript>(loggerMock.Object);
            var htmlEncoderMock = new Mock<IHtmlEncoder>();
            var persistenceStoreMock = new Mock<IPersistenceStore>();
            var inspectors = new ReflectionDiscoverableCollection<IInspector>(loggerMock.Object);
            var resources = new ReflectionDiscoverableCollection<IResource>(loggerMock.Object);
            var serializerMock = new Mock<ISerializer>();
            var tabs = new ReflectionDiscoverableCollection<ITab>(loggerMock.Object);
            var displays = new ReflectionDiscoverableCollection<IDisplay>(loggerMock.Object);
            var policies = new ReflectionDiscoverableCollection<IRuntimePolicy>(loggerMock.Object);
            var resourceMock = new Mock<IResource>();
            var proxyFactoryMock = new Mock<IProxyFactory>();
            var messageBrokerMock = new Mock<IMessageBroker>();

            var configuration =
                new GlimpseConfiguration(frameworkProviderMock.Object, endpointConfigMock.Object, clientScripts, loggerMock.Object, RuntimePolicy.On, htmlEncoderMock.Object, persistenceStoreMock.Object, inspectors, resources, serializerMock.Object, tabs, displays, policies, resourceMock.Object, proxyFactoryMock.Object, messageBrokerMock.Object, "~/Glimpse.axd", () => new ExecutionTimer(Stopwatch.StartNew()), () => RuntimePolicy.On);


            return new GlimpseRuntimeTester(configuration, frameworkProviderMock, endpointConfigMock);
        }