public async Task LimitMaximumTestCasesRunInParallel()
        {
            var testCasesInProgress = 0;

            async Task <Microsoft.VisualStudio.TestPlatform.ObjectModel.TestResult> CreateTask(TestCase testCase)
            {
                Interlocked.Increment(ref testCasesInProgress);

                await Task.Yield();

                Interlocked.Decrement(ref testCasesInProgress);

                return(new Microsoft.VisualStudio.TestPlatform.ObjectModel.TestResult(testCase));
            }

            var serviceProvider = new DefaultServiceProvider();
            var context         = new TestRunContext(
                serviceProvider,
                new NullTestLogAccessor())
            {
                MaximumSimultaneousTestCases = 1
            };

            var mockStepsExecutor = new Mock <IStepsExecutor>();

            var testCaseExecutor = new TestCaseExecutor(context, binder =>
            {
                if (testCasesInProgress > 1)
                {
                    Assert.Fail();
                }

                return(mockStepsExecutor.Object);
            });

            var testCase1 = new TestCase()
            {
                LocalExtensionData = new DiscoveredTestData(Assembly.GetExecutingAssembly(), new MockFeature(), null, new MockScenario())
            };

            mockStepsExecutor
            .Setup(m => m.Execute(testCase1, It.IsAny <DiscoveredTestData>(), context, It.IsAny <IMessageLogger>()))
            .Returns(CreateTask(testCase1));

            var testCase2 = new TestCase()
            {
                LocalExtensionData = new DiscoveredTestData(Assembly.GetExecutingAssembly(), new MockFeature(), null, new MockScenario())
            };

            mockStepsExecutor
            .Setup(m => m.Execute(testCase2, It.IsAny <DiscoveredTestData>(), context, It.IsAny <IMessageLogger>()))
            .Returns(CreateTask(testCase2));

            await testCaseExecutor
            .RunTestCases(
                new[] { testCase1, testCase2 },
                Mock.Of <IFrameworkHandle>(),
                CancellationToken.None)
            .ConfigureAwait(false);
        }
Пример #2
0
        private async Task RunTestCases(IEnumerable <TestCase> mappedTests, IFrameworkHandle frameworkHandle)
        {
            using var defaultServiceProvider = new DefaultServiceProvider();
            var testRunContext = defaultServiceProvider.GetService <TestRunContext>();

            var testCaseExecutor = new TestCaseExecutor(
                testRunContext,
                stepsBinder => new StepsExecutor(stepsBinder));

            await testCaseExecutor
            .RunTestCases(mappedTests, frameworkHandle, cancellationTokenSource.Token)
            .ConfigureAwait(false);
        }