Пример #1
0
        public async Task <ICoverageAnalysisResult> AnalyseCoverage(Config config)
        {
            var memberIdsToNames = new Dictionary <string, string>();

            var baseTempDirectory = TempDirectory.Create();

            long memberId = 0;

            long GenerateMemberId() => ++ memberId;

            try
            {
                var copiedTestAssemblyFilePaths =
                    CopyTestAssembliesToTempDirectories(
                        config.TestAssemblyFilePaths,
                        baseTempDirectory)
                    .ToList();

                using (var workspace = MSBuildWorkspaceFactory.Create())
                {
                    var solution = await workspace.OpenSolutionAsync(config.SolutionFilePath);

                    await InstrumentThenCompileMultipleProjects(
                        solution.Projects.Where(p => Filtering.ShouldMutateProject(p, config)),
                        config,
                        baseTempDirectory,
                        copiedTestAssemblyFilePaths,
                        GenerateMemberId,
                        memberIdsToNames);

                    var result = new CoverageAnalysisResult();

                    for (int testAssemblyIndex = 0; testAssemblyIndex < config.TestAssemblyFilePaths.Length; ++testAssemblyIndex)
                    {
                        var copiedTestAssemblyFilePath = copiedTestAssemblyFilePaths[testAssemblyIndex];

                        var numTests = testFinder.FindTests(new[] { copiedTestAssemblyFilePath }).Length;

                        var runResult = testRunner.RunAllTestsAndAnalyseCoverage(
                            testAssemblyFilePaths: new [] { copiedTestAssemblyFilePath },
                            memberIdsToNames: memberIdsToNames,
                            onAnalysingTestCase: (test, index) => eventListener.BeginCoverageAnalysisOfTestCase(test, index, numTests));

                        if (runResult.Status != TestRunStatus.AllTestsPassed)
                        {
                            return(CoverageAnalysisResult.Error(runResult.Error));
                        }

                        var originalTestAssemblyFilePath = config.TestAssemblyFilePaths[testAssemblyIndex];
                        result = result.WithCoveredMembers(runResult.MembersAndCoveringTests, originalTestAssemblyFilePath);
                    }

                    return(result);
                }
            }
            finally
            {
                Directory.Delete(baseTempDirectory, recursive: true);
            }
        }
Пример #2
0
        protected void Given_coverage_analysis_runs_successfully()
        {
            ICoverageAnalysisResult emptyCoverageResult = new CoverageAnalysisResult();

            MockCoverageAnalyser
            .Setup(x => x.AnalyseCoverage(It.IsAny <Config>()))
            .Callback(() =>
            {
                for (var i = 0; i < 10; ++i)
                {
                    eventListener.BeginCoverageAnalysisOfTestCase($"Test{i}", i, 10);
                }
            })
            .Returns(
                Task.FromResult(emptyCoverageResult));
        }