コード例 #1
0
        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);
        }