diff --git a/TechTalk.SpecFlow/CucumberMessages/TestRunResultCollector.cs b/TechTalk.SpecFlow/CucumberMessages/TestRunResultCollector.cs index 519bbad43..685f0d6d4 100644 --- a/TechTalk.SpecFlow/CucumberMessages/TestRunResultCollector.cs +++ b/TechTalk.SpecFlow/CucumberMessages/TestRunResultCollector.cs @@ -11,6 +11,8 @@ public class TestRunResultCollector : ITestRunResultCollector private readonly IDictionary _collectedResults = new Dictionary(); public bool IsStarted { get; private set; } + private readonly object _lock = new object(); + public void StartCollecting() { if (IsStarted) @@ -28,7 +30,11 @@ public void CollectTestResultForScenario(ScenarioInfo scenarioInfo, TestResult t throw new InvalidOperationException("Result collection has not been started."); } - _collectedResults.Add(scenarioInfo, testResult); + + lock (_lock) + { + _collectedResults.Add(scenarioInfo, testResult); + } } public IResult GetCurrentResult() @@ -39,8 +45,12 @@ public IResult GetCurrentResult() } - var groups = _collectedResults.GroupBy(kv => kv.Value.Status, kv => (kv.Key, kv.Value)) - .ToArray(); + IGrouping[] groups; + lock (_lock) + { + groups = _collectedResults.GroupBy(kv => kv.Value.Status, kv => (kv.Key, kv.Value)) + .ToArray(); + } var passedCount = groups.SingleOrDefault(g => g.Key == TestResult.Types.Status.Passed)?.Count() ?? 0; var failedCount = groups.SingleOrDefault(g => g.Key == TestResult.Types.Status.Failed)?.Count() ?? 0;