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); }
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); }