コード例 #1
0
        public async Task <List <TestRailResult> > RecordResultAsync(TestContext context, string version = null, string comment = null, TimeSpan?elapsed = null)
        {
            var(caseIds, defects) = ReadAttributesOnTest(context);

            string defectsFixedComment = null;

            if (defects.Length > 0 && context.Result.Outcome.Status == TestStatus.Passed)
            {
                defectsFixedComment = "**This test passed**, although there's known defects related to this test. The defects could be already fixed.";
            }

            string notPassedComment = context.Result.Outcome.Status switch
            {
                TestStatus.Passed => null,
                TestStatus.Skipped => null,
                _ => context.Result.Assertions.Select(a => $"{a.Message}\n\n{a.StackTrace}").LastOrDefault()
            };

            string status = defects.Count() > 0
                ? _config.StatusMapping.WithDefect
                : context.Result.Outcome.Status switch
            {
                TestStatus.Passed => _config.StatusMapping.Passed,
                TestStatus.Failed => _config.StatusMapping.Failed,
                TestStatus.Skipped => _config.StatusMapping.Skipped,
                TestStatus.Inconclusive => _config.StatusMapping.Inconclusive,
                TestStatus.Warning => _config.StatusMapping.Warning,
                _ => _config.StatusMapping.Inconclusive,
            };

            var results = new List <TestRailResult>();

            foreach (var(isFilteredCases, ids) in _client.SplitCaseIdsByFilter(caseIds))
            {
                var partial = await _client.RecordResultAsync(
                    ids,
                    new TestResult
                {
                    Version = version,
                    Status  = isFilteredCases ? status : _config.StatusMapping.FilteringResidue,
                    Defects = defects,
                    Comment = new[] { defectsFixedComment, comment, notPassedComment }
                    .Where(c => !string.IsNullOrEmpty(c))
                    .DefaultIfEmpty().Aggregate((a, b) => $"{a}\n\n{b}"),
                    Elapsed = elapsed ?? TimeSpan.Zero,
                }
                    );

                results.AddRange(partial);
            }

            return(results);
        }
    }