public void Test_CheckTypeAccess( )
        {
            CounterEntityAccessControlChecker checker;
            MockRepository mockRepository;
            Mock <IEntityAccessControlChecker> mockChecker;
            Mock <ISingleInstancePerformanceCounterCategory> mockSingleInstancePerformanceCounterCategory;
            Mock <IMultiInstancePerformanceCounterCategory>  mockMultiInstancePerformanceCounterCategory;
            IList <EntityType> entityTypes;
            EntityRef          user;
            EntityRef          permission;

            entityTypes = new [] { new EntityType() };
            user        = new EntityRef(100);
            permission  = new EntityRef(101);

            mockRepository = new MockRepository(MockBehavior.Strict);
            mockChecker    = mockRepository.Create <IEntityAccessControlChecker>();
            mockChecker
            .Setup(c => c.CheckTypeAccess(It.Is <IList <EntityType> >(ets => ets.SequenceEqual(entityTypes)), permission, user))
            .Returns(entityTypes.ToDictionary(et => et.Id, et => true));

            mockSingleInstancePerformanceCounterCategory = mockRepository.Create <ISingleInstancePerformanceCounterCategory>();
            mockSingleInstancePerformanceCounterCategory
            .Setup(c => c.GetPerformanceCounter <RatePerSecond32PerformanceCounter>(It.IsAny <string>()))
            .Returns(mockRepository.Create <RatePerSecond32PerformanceCounter>(MockBehavior.Loose).Object);
            mockSingleInstancePerformanceCounterCategory
            .Setup(c => c.GetPerformanceCounter <NumberOfItems64PerformanceCounter>(It.IsAny <string>()))
            .Returns(mockRepository.Create <NumberOfItems64PerformanceCounter>(MockBehavior.Loose).Object);
            mockSingleInstancePerformanceCounterCategory
            .Setup(c => c.GetPerformanceCounter <AverageTimer32PerformanceCounter>(It.IsAny <string>()))
            .Returns(mockRepository.Create <AverageTimer32PerformanceCounter>(MockBehavior.Loose).Object);

            mockMultiInstancePerformanceCounterCategory = mockRepository.Create <IMultiInstancePerformanceCounterCategory>();
            mockMultiInstancePerformanceCounterCategory
            .Setup(c => c.GetPerformanceCounter <RatePerSecond32PerformanceCounter>(It.IsAny <string>(), It.IsAny <string>()))
            .Returns(mockRepository.Create <RatePerSecond32PerformanceCounter>(MockBehavior.Loose).Object);
            mockMultiInstancePerformanceCounterCategory
            .Setup(c => c.GetPerformanceCounter <NumberOfItems64PerformanceCounter>(It.IsAny <string>(), It.IsAny <string>()))
            .Returns(mockRepository.Create <NumberOfItems64PerformanceCounter>(MockBehavior.Loose).Object);

            checker = new CounterEntityAccessControlChecker(mockChecker.Object,
                                                            mockSingleInstancePerformanceCounterCategory.Object,
                                                            mockMultiInstancePerformanceCounterCategory.Object);
            checker.CheckTypeAccess(entityTypes, permission, user);

            mockRepository.VerifyAll();
        }