コード例 #1
0
        public void LoadTestsShouldCallIntoOtherDiscoverersWhenCreatingOneFails()
        {
            try
            {
                TestPluginCacheTests.SetupMockExtensions(
                    new string[] { typeof(DiscovererEnumeratorTests).GetTypeInfo().Assembly.Location },
                    () => { });

                var sources = new List <string>
                {
                    "test1.csv",
                    typeof(DiscoveryResultCacheTests).GetTypeInfo().Assembly.Location
                };

                var extensionSourceMap = new Dictionary <string, IEnumerable <string> >();
                extensionSourceMap.Add("_none_", sources);

                var    settings       = new Mock <IRunSettings>().Object;
                var    logger         = new Mock <IMessageLogger>().Object;
                string testCaseFilter = "TestFilter";

                this.discovererEnumerator.LoadTests(extensionSourceMap, settings, testCaseFilter, logger);

                Assert.IsTrue(DllTestDiscoverer.IsDiscoverTestCalled);
                Assert.IsFalse(SingletonTestDiscoverer.IsDiscoverTestCalled);

                // Also validate that the right set of arguments were passed on to the discoverer.
                CollectionAssert.AreEqual(new List <string> {
                    sources[1]
                }, DllTestDiscoverer.Sources.ToList());
                Assert.AreEqual(settings, DllTestDiscoverer.DiscoveryContext.RunSettings);
                Assert.AreEqual(testCaseFilter, (DllTestDiscoverer.DiscoveryContext as DiscoveryContext).FilterExpressionWrapper.FilterString);
                Assert.AreEqual(logger, DllTestDiscoverer.MessageLogger);
                Assert.IsNotNull(DllTestDiscoverer.DiscoverySink);
            }
            finally
            {
                this.ResetDiscoverers();
            }
        }
コード例 #2
0
        public void StartTestRunShouldRunTestsForTheProvidedTests()
        {
            var assemblyLocation = typeof(ExecutionManagerTests).GetTypeInfo().Assembly.Location;

            var tests = new List <TestCase>
            {
                new TestCase("A.C.M1", new Uri(RunTestsWithSourcesTestsExecutorUri), assemblyLocation)
            };

            var mockTestRunEventsHandler = new Mock <ITestRunEventsHandler>();

            var isExecutorCalled = false;

            RunTestWithSourcesExecutor.RunTestsWithTestsCallback = (s, rc, fh) =>
            {
                isExecutorCalled = true;
                var tr =
                    new Microsoft.VisualStudio.TestPlatform.ObjectModel.TestResult(
                        new Microsoft.VisualStudio.TestPlatform.ObjectModel.TestCase(
                            "A.C.M",
                            new Uri(RunTestsWithSourcesTestsExecutorUri),
                            "A.dll"));
                fh.RecordResult(tr);
            };
            TestPluginCacheTests.SetupMockExtensions(new string[] { assemblyLocation }, () => { });


            this.executionManager.StartTestRun(tests, null, null, testExecutionContext, null, mockTestRunEventsHandler.Object);

            Assert.IsTrue(isExecutorCalled);
            mockTestRunEventsHandler.Verify(
                treh => treh.HandleTestRunComplete(It.IsAny <TestRunCompleteEventArgs>(),
                                                   It.IsAny <TestRunChangedEventArgs>(),
                                                   It.IsAny <ICollection <AttachmentSet> >(),
                                                   It.IsAny <ICollection <string> >()), Times.Once);

            // Also verify that run stats are passed through.
            mockTestRunEventsHandler.Verify(treh => treh.HandleTestRunStatsChange(It.IsAny <TestRunChangedEventArgs>()), Times.Once);
        }
コード例 #3
0
        public void LoadTestsShouldCollectMetrics()
        {
            var mockMetricsCollector = new Mock <IMetricsCollection>();
            var dict = new Dictionary <string, object>();

            dict.Add("DummyMessage", "DummyValue");

            TestPluginCacheTests.SetupMockExtensions(
                new string[] { typeof(DiscovererEnumeratorTests).GetTypeInfo().Assembly.Location },
                () => { });

            var sources = new List <string>
            {
                typeof(DiscoveryResultCacheTests).GetTypeInfo().Assembly.Location,
                typeof(DiscoveryResultCacheTests).GetTypeInfo().Assembly.Location
            };

            var extensionSourceMap = new Dictionary <string, IEnumerable <string> >();

            extensionSourceMap.Add("_none_", sources);

            mockMetricsCollector.Setup(mc => mc.Metrics).Returns(dict);
            this.mockRequestData.Setup(rd => rd.MetricsCollection).Returns(mockMetricsCollector.Object);

            string testCaseFilter = "TestFilter";

            this.discovererEnumerator.LoadTests(extensionSourceMap, this.runSettingsMock.Object, testCaseFilter, this.messageLoggerMock.Object);

            // Verify.
            mockMetricsCollector.Verify(rd => rd.Add(TelemetryDataConstants.TimeTakenInSecByAllAdapters, It.IsAny <object>()), Times.Once);
            mockMetricsCollector.Verify(rd => rd.Add(TelemetryDataConstants.NumberOfAdapterUsedToDiscoverTests, It.IsAny <object>()), Times.Once);
            mockMetricsCollector.Verify(rd => rd.Add(TelemetryDataConstants.NumberOfAdapterDiscoveredDuringDiscovery, It.IsAny <object>()), Times.Once);
            mockMetricsCollector.Verify(rd => rd.Add(TelemetryDataConstants.TotalTestsByAdapter + ".discoverer://manageddlldiscoverer/", It.IsAny <object>()), Times.Once);
            mockMetricsCollector.Verify(rd => rd.Add(TelemetryDataConstants.TimeTakenToDiscoverTestsByAnAdapter + ".discoverer://manageddlldiscoverer/", It.IsAny <object>()), Times.Once);
            mockMetricsCollector.Verify(rd => rd.Add(TelemetryDataConstants.TotalTestsByAdapter + ".discoverer://nativedlldiscoverer/", It.IsAny <object>()), Times.Once);
            mockMetricsCollector.Verify(rd => rd.Add(TelemetryDataConstants.TimeTakenToDiscoverTestsByAnAdapter + ".discoverer://nativedlldiscoverer/", It.IsAny <object>()), Times.Once);
            mockMetricsCollector.Verify(rd => rd.Add(TelemetryDataConstants.TimeTakenToLoadAdaptersInSec, It.IsAny <object>()), Times.Once);
        }
コード例 #4
0
        public void DiscoverTestsShouldSendMetricsOnDiscoveryComplete()
        {
            var metricsCollector = new MetricsCollection();

            metricsCollector.Add("DummyMessage", "DummyValue");

            this.mockRequestData.Setup(rd => rd.MetricsCollection).Returns(metricsCollector);

            DiscoveryCompleteEventArgs receivedDiscoveryCompleteEventArgs = null;

            TestPluginCacheTests.SetupMockExtensions(
                new string[] { typeof(DiscovererEnumeratorTests).GetTypeInfo().Assembly.Location },
                () => { });

            var sources = new List <string>
            {
                typeof(DiscoveryManagerTests).GetTypeInfo().Assembly.Location
            };

            var mockLogger = new Mock <ITestDiscoveryEventsHandler2>();
            var criteria   = new DiscoveryCriteria(sources, 1, null);

            mockLogger.Setup(ml => ml.HandleDiscoveryComplete(It.IsAny <DiscoveryCompleteEventArgs>(), It.IsAny <IEnumerable <TestCase> >()))
            .Callback(
                (DiscoveryCompleteEventArgs complete,
                 IEnumerable <TestCase> tests) =>
            {
                receivedDiscoveryCompleteEventArgs = complete;
            });

            // Act.
            this.discoveryManager.DiscoverTests(criteria, mockLogger.Object);

            // Assert
            Assert.IsNotNull(receivedDiscoveryCompleteEventArgs.Metrics);
            Assert.IsTrue(receivedDiscoveryCompleteEventArgs.Metrics.Any());
            Assert.IsTrue(receivedDiscoveryCompleteEventArgs.Metrics.ContainsKey("DummyMessage"));
        }
コード例 #5
0
        public void TestInit()
        {
            this.testableTestRunCache = new TestableTestRunCache();
            this.testExecutionContext = new TestExecutionContext(
                frequencyOfRunStatsChangeEvent: 100,
                runStatsChangeEventTimeout: TimeSpan.MaxValue,
                inIsolation: false,
                keepAlive: false,
                isDataCollectionEnabled: false,
                areTestCaseLevelEventsRequired: false,
                hasTestRun: false,
                isDebug: false,
                testCaseFilter: null);
            this.mockTestRunEventsHandler = new Mock <ITestRunEventsHandler>();
            this.requestData = new RequestData(new NoOpMetricsCollection());

            TestPluginCacheTests.SetupMockExtensions(
                new string[] { typeof(RunTestsWithSourcesTests).GetTypeInfo().Assembly.Location },
                () => { });

            TestPluginCache.Instance.DiscoverTestExtensions <TestExecutorPluginInformation, ITestExecutor>(TestPlatformConstants.TestAdapterEndsWithPattern);
            TestPluginCache.Instance.DiscoverTestExtensions <TestDiscovererPluginInformation, ITestDiscoverer>(TestPlatformConstants.TestAdapterEndsWithPattern);
        }
コード例 #6
0
        public void LoadTestsShouldReportWarningOnNoDiscoverers()
        {
            TestPluginCacheTests.SetupMockExtensions(
                new string[] { typeof(TestPluginCache).GetTypeInfo().Assembly.Location },
                () => { });
            var sources = new List <string> {
                typeof(DiscoveryResultCacheTests).GetTypeInfo().Assembly.Location
            };
            var mockLogger = new Mock <IMessageLogger>();

            var extensionSourceMap = new Dictionary <string, IEnumerable <string> >();

            extensionSourceMap.Add("_none_", sources);

            this.discovererEnumerator.LoadTests(extensionSourceMap, new Mock <IRunSettings>().Object, mockLogger.Object);

            mockLogger.Verify(
                l =>
                l.SendMessage(
                    TestMessageLevel.Warning,
                    "No test discoverer is registered to perform discovery of test cases. Register a test discoverer and try again."),
                Times.Once);
        }
コード例 #7
0
        public void InitializeSettingsProvidersShouldLoadSettingsIntoMultipleSettingsProviders()
        {
            TestPluginCacheTests.SetupMockExtensions();

            var runSettings = new RunSettings();

            runSettings.InitializeSettingsProviders(this.GetRunSettingsWithRunConfigurationAndMSTestNode());

            var rcSettingsProvider     = runSettings.GetSettings("RunConfiguration");
            var mstestSettingsProvider = runSettings.GetSettings("MSTest");

            Assert.IsNotNull(rcSettingsProvider);
            Assert.IsTrue(rcSettingsProvider is RunConfigurationSettingsProvider);
            Assert.AreEqual(
                "<RunConfiguration><Architecture>x86</Architecture></RunConfiguration>",
                (rcSettingsProvider as RunConfigurationSettingsProvider).SettingsTree);

            Assert.IsNotNull(mstestSettingsProvider);
            Assert.IsTrue(mstestSettingsProvider is MSTestSettingsProvider);
            Assert.AreEqual(
                "<MSTest><NoAppDomain>true</NoAppDomain></MSTest>",
                (mstestSettingsProvider as MSTestSettingsProvider).SettingsTree);
        }
コード例 #8
0
        public void LoadTestsShouldReportWarningOnNoDiscoverers()
        {
            TestPluginCacheTests.SetupMockExtensions(
                new string[] { typeof(TestPluginCache).GetTypeInfo().Assembly.Location },
                () => { });
            var sources = new List <string> {
                typeof(DiscoveryResultCacheTests).GetTypeInfo().Assembly.Location
            };

            var extensionSourceMap = new Dictionary <string, IEnumerable <string> >();

            extensionSourceMap.Add("_none_", sources);

            this.discovererEnumerator.LoadTests(extensionSourceMap, this.runSettingsMock.Object, null, this.messageLoggerMock.Object);

            var messageFormat =
                "No test is available in {0}. Make sure that test discoverer & executors are registered and platform & framework version settings are appropriate and try again.";
            var message = string.Format(messageFormat, string.Join(" ", sources));

            this.messageLoggerMock.Verify(
                l =>
                l.SendMessage(TestMessageLevel.Warning, message), Times.Once);
        }
コード例 #9
0
        public BaseRunTestsTests()
        {
            this.testExecutionContext = new TestExecutionContext(
                frequencyOfRunStatsChangeEvent: 100,
                runStatsChangeEventTimeout: TimeSpan.MaxValue,
                inIsolation: false,
                keepAlive: false,
                isDataCollectionEnabled: false,
                areTestCaseLevelEventsRequired: false,
                hasTestRun: false,
                isDebug: false,
                testCaseFilter: string.Empty,
                filterOptions: null);
            this.mockTestRunEventsHandler = new Mock <ITestRunEventsHandler>();

            this.mockTestPlatformEventSource = new Mock <ITestPlatformEventSource>();

            this.mockRequestData       = new Mock <IRequestData>();
            this.mockMetricsCollection = new Mock <IMetricsCollection>();
            this.mockThread            = new Mock <IThread>();
            this.mockDataSerializer    = new Mock <IDataSerializer>();
            this.mockRequestData.Setup(rd => rd.MetricsCollection).Returns(this.mockMetricsCollection.Object);

            this.runTestsInstance = new TestableBaseRunTests(
                this.mockRequestData.Object,
                null,
                null,
                this.testExecutionContext,
                null,
                this.mockTestRunEventsHandler.Object,
                this.mockTestPlatformEventSource.Object,
                null,
                new PlatformThread(),
                this.mockDataSerializer.Object);

            TestPluginCacheTests.SetupMockExtensions(new string[] { typeof(BaseRunTestsTests).GetTypeInfo().Assembly.Location }, () => { });
        }
コード例 #10
0
        public void LoadTestsShouldNotCallIntoDiscoverersWhenCancelled()
        {
            // Setup
            string[] extensions = new string[] { typeof(DiscovererEnumeratorTests).GetTypeInfo().Assembly.Location };
            TestPluginCacheTests.SetupMockExtensions(extensions, () => { });

            var dllsources = new List <string>
            {
                typeof(DiscoveryResultCacheTests).GetTypeInfo().Assembly.Location,
                typeof(DiscoveryResultCacheTests).GetTypeInfo().Assembly.Location
            };
            var jsonsources = new List <string>
            {
                "test1.json",
                "test2.json"
            };
            var sources = new List <string>(dllsources);

            sources.AddRange(jsonsources);

            var extensionSourceMap = new Dictionary <string, IEnumerable <string> >
            {
                { "_none_", sources }
            };

            // Act
            this.cancellationTokenSource.Cancel();
            var    runSettings    = this.runSettingsMock.Object;
            string testCaseFilter = "TestFilter";

            this.discovererEnumerator.LoadTests(extensionSourceMap, runSettings, testCaseFilter, this.messageLoggerMock.Object);

            // Validate
            Assert.IsFalse(ManagedDllTestDiscoverer.IsManagedDiscoverTestCalled);
            Assert.IsFalse(JsonTestDiscoverer.IsDiscoverTestCalled);
            this.messageLoggerMock.Verify(logger => logger.SendMessage(TestMessageLevel.Warning, "Discovery of tests cancelled."), Times.Once);
        }
コード例 #11
0
        public void LoadTestsShouldCallIntoADiscovererThatMatchesTheSources()
        {
            try
            {
                TestPluginCacheTests.SetupMockExtensions(
                    new string[] { typeof(DiscovererEnumeratorTests).GetTypeInfo().Assembly.Location },
                    () => { });

                var sources = new List <string>
                {
                    typeof(DiscoveryResultCacheTests).GetTypeInfo().Assembly.Location,
                    typeof(DiscoveryResultCacheTests).GetTypeInfo().Assembly.Location
                };

                var extensionSourceMap = new Dictionary <string, IEnumerable <string> >();
                extensionSourceMap.Add("_none_", sources);

                var settings = new Mock <IRunSettings>().Object;
                var logger   = new Mock <IMessageLogger>().Object;

                this.discovererEnumerator.LoadTests(extensionSourceMap, settings, logger);

                Assert.IsTrue(DllTestDiscoverer.IsDiscoverTestCalled);
                Assert.IsFalse(JsonTestDiscoverer.IsDiscoverTestCalled);

                // Also validate that the right set of arguments were passed on to the discoverer.
                CollectionAssert.AreEqual(sources, DllTestDiscoverer.Sources.ToList());
                Assert.AreEqual(settings, DllTestDiscoverer.DiscoveryContext.RunSettings);
                Assert.AreEqual(logger, DllTestDiscoverer.MessageLogger);
                Assert.IsNotNull(DllTestDiscoverer.DiscoverySink);
            }
            finally
            {
                this.ResetDiscoverers();
            }
        }
コード例 #12
0
        public void InitializeShouldInitializeExtensionsIfPresent()
        {
            // Make sure TestPlugincache is refreshed.
            TestPluginCache.Instance = null;

            try
            {
                var extensions = new[] { "c:\\e1.dll", "c:\\e2.dll" };
                TestPluginCacheTests.SetupMockAdditionalPathExtensions(extensions);
                this.mockRequestSender.Setup(s => s.WaitForRequestHandlerConnection(It.IsAny <int>())).Returns(true);

                this.testExecutionManager.Initialize();

                // Also verify that we have waited for client connection.
                this.mockRequestSender.Verify(s => s.WaitForRequestHandlerConnection(It.IsAny <int>()), Times.Once);
                this.mockRequestSender.Verify(
                    s => s.InitializeExecution(extensions, true),
                    Times.Once);
            }
            finally
            {
                TestPluginCache.Instance = null;
            }
        }
コード例 #13
0
        public void DiscoverTestsShouldInitializeExtensionsIfPresent()
        {
            // Make sure TestPlugincache is refreshed.
            TestPluginCache.Instance = null;

            try
            {
                var extensions = new[] { "c:\\e1.dll", "c:\\e2.dll" };

                // Setup Mocks.
                TestPluginCacheTests.SetupMockAdditionalPathExtensions(extensions);
                this.mockRequestSender.Setup(s => s.WaitForRequestHandlerConnection(It.IsAny <int>())).Returns(true);
                this.mockTestHostManager.Setup(th => th.GetTestPlatformExtensions(It.IsAny <IEnumerable <string> >(), It.IsAny <IEnumerable <string> >())).Returns(new[] { "c:\\e1.dll", "c:\\e2.dll" });

                this.testDiscoveryManager.DiscoverTests(this.discoveryCriteria, null);

                // Also verify that we have waited for client connection.
                this.mockRequestSender.Verify(s => s.InitializeDiscovery(extensions), Times.Once);
            }
            finally
            {
                TestPluginCache.Instance = null;
            }
        }
コード例 #14
0
ファイル: BaseRunTestsTests.cs プロジェクト: realnt/vstest
        public void RunTestsShouldInvokeTheTestExecutorIfAdapterAssemblyIsUnknown()
        {
            var executorUriExtensionMap = new List <Tuple <Uri, string> >
            {
                new Tuple <Uri, string>(new Uri(BaseRunTestsExecutorUri), Microsoft.VisualStudio.TestPlatform.ObjectModel.Constants.UnspecifiedAdapterPath)
            };
            LazyExtension <ITestExecutor, ITestExecutorCapabilities> receivedExecutor = null;

            // Setup mocks.
            this.runTestsInstance.GetExecutorUriExtensionMapCallback = (fh, rc) => { return(executorUriExtensionMap); };
            this.runTestsInstance.InvokeExecutorCallback             =
                (executor, executorUriExtensionTuple, runContext, frameworkHandle) =>
            {
                receivedExecutor = executor;
            };
            TestPluginCacheTests.SetupMockExtensions(
                new string[] { typeof(BaseRunTestsTests).GetTypeInfo().Assembly.Location },
                () => { });

            this.runTestsInstance.RunTests();

            Assert.IsNotNull(receivedExecutor);
            Assert.AreEqual(BaseRunTestsExecutorUri, receivedExecutor.Metadata.ExtensionUri);
        }
コード例 #15
0
 public void TestCleanup()
 {
     TestPluginCacheTests.ResetExtensionsCache();
     TestSessionMessageLogger.Instance = null;
 }
コード例 #16
0
ファイル: BaseRunTestsTests.cs プロジェクト: navin22/nvstest
 public void Cleanup()
 {
     TestExecutorExtensionManager.Destroy();
     TestPluginCacheTests.ResetExtensionsCache();
 }
コード例 #17
0
 public TestHostProviderManagerTests()
 {
     TestPluginCacheTests.SetupMockExtensions();
 }
コード例 #18
0
ファイル: TestLoggerManagerTests.cs プロジェクト: tmds/vstest
 public void Initialize()
 {
     TestPluginCacheTests.SetupMockExtensions();
 }
コード例 #19
0
ファイル: TestEngineTests.cs プロジェクト: genlu/vstest
 public TestEngineTests()
 {
     TestPluginCacheTests.SetupMockExtensions(new[] { typeof(TestEngineTests).GetTypeInfo().Assembly.Location }, () => { });
     this.testEngine = new TestableTestEngine();
     this.testableTestRuntimeProvider = new TestableRuntimeProvider(true);
 }
コード例 #20
0
 public void TestCleanup()
 {
     RunTestWithSourcesExecutor.RunTestsWithSourcesCallback = null;
     TestPluginCacheTests.ResetExtensionsCache();
 }