public void GetControllerTypes_CallsMocks()
        {
            // Arrange
            TestTraceWriter traceWriter = new TestTraceWriter();
            DefaultHttpControllerTypeResolverTracer tracer =
                new DefaultHttpControllerTypeResolverTracer(
                    HttpControllerTypeResolver.Object,
                    traceWriter
                    );

            // Act
            tracer.GetControllerTypes(AssembliesResolver.Object);

            // Assert (particularly important tracer delegates to original DefaultHttpControllerTypeResolver)
            HttpControllerTypeResolver.Verify(
                controller => controller.GetControllerTypes(AssembliesResolver.Object),
                Times.Once()
                );

            // Predicate is not called on null entries or internal types in the Type arrays (see TypeIsVisible)
            HttpControllerTypeResolver.VerifyGet(
                controller => controller.IsControllerTypePredicate,
                Times.Exactly(7)
                );

            AssembliesResolver.Verify(resolver => resolver.GetAssemblies(), Times.Once());
            foreach (Mock <MockableAssembly> mock in Assemblies)
            {
                mock.VerifyGet(assembly => assembly.IsDynamic, Times.Once());
                mock.Verify(
                    assembly => assembly.GetTypes(),
                    mock.Object.IsDynamic ? Times.Never() : Times.Once()
                    );
            }
        }
        public void GetControllerTypes_TracesAsExpected()
        {
            // Arrange
            TestTraceWriter traceWriter = new TestTraceWriter();
            DefaultHttpControllerTypeResolverTracer tracer =
                new DefaultHttpControllerTypeResolverTracer(HttpControllerTypeResolver.Object, traceWriter);

            // Act
            ICollection <Type> types = tracer.GetControllerTypes(AssembliesResolver.Object);

            // Assert
            Assert.NotNull(traceWriter.Traces);
            Assert.Equal(ExpectedTraces, traceWriter.Traces, new TraceRecordComparer());
        }
        public void GetControllerTypes_ReturnsExpectedTypes()
        {
            // Arrange
            TestTraceWriter traceWriter = new TestTraceWriter();
            DefaultHttpControllerTypeResolverTracer tracer =
                new DefaultHttpControllerTypeResolverTracer(HttpControllerTypeResolver.Object, traceWriter);

            // Act
            ICollection <Type> types = tracer.GetControllerTypes(AssembliesResolver.Object);

            // Assert
            Assert.NotNull(types);
            Assert.NotEmpty(types);
            Assert.Equal(ExpectedTypes, types);
        }