public int ExecuteWithRetry() { _fileSystemProvider.DeleteTestResultFiles(); _processExecutionProvider.ExecuteProcessWithAdditionalArguments(); _processExecutionProvider.CurrentProcessWaitForExit(); var testRun = _fileSystemProvider.DeserializeTestRun(); var areAllTestsGreen = 0; var failedTests = new List <TestRunUnitTestResult>(); failedTests = _microsoftTestTestRunProvider.GetAllNotPassedTests(testRun.Results.ToList()); var failedTestsPercentage = _microsoftTestTestRunProvider.CalculatedFailedTestsPercentage(failedTests, testRun.Results.ToList()); if (failedTestsPercentage < _consoleArgumentsProvider.FailedTestsThreshold) { for (var i = 0; i < _consoleArgumentsProvider.RetriesCount - 1; i++) { _log.InfoFormat("Start to execute again {0} failed tests.", failedTests.Count); if (failedTests.Count > 0) { var currentTestResultPath = _fileSystemProvider.GetTempTrxFile(); var retryRunArguments = _microsoftTestTestRunProvider.GenerateAdditionalArgumentsForFailedTestsRun(failedTests, currentTestResultPath); _log.InfoFormat("Run {0} time with arguments {1}", i + 2, retryRunArguments); _processExecutionProvider.ExecuteProcessWithAdditionalArguments(retryRunArguments); _processExecutionProvider.CurrentProcessWaitForExit(); var currentTestRun = _fileSystemProvider.DeserializeTestRun(currentTestResultPath); var passedTests = _microsoftTestTestRunProvider.GetAllPassesTests(currentTestRun); _microsoftTestTestRunProvider.UpdatePassedTests(passedTests, testRun.Results.ToList()); _microsoftTestTestRunProvider.UpdateResultsSummary(testRun); } else { break; } failedTests = _microsoftTestTestRunProvider.GetAllNotPassedTests(testRun.Results.ToList()); } } if (failedTests.Count > 0) { areAllTestsGreen = 1; } _fileSystemProvider.SerializeTestRun(testRun); return(areAllTestsGreen); }