Esempio n. 1
0
        public TestRunResult CaptureCoverage(bool cantUsePipe, bool cantUseUnloadAppDomain)
        {
            if (cantUseUnloadAppDomain)
            {
                _logger.LogWarning("Can't capture the test coverage as the target framework does not support 'AppDomain'. ");
                return new TestRunResult() { Success = true };
            }

            if (cantUsePipe)
            {
                _logger.LogDebug("Target framework does not support NamedPipes. Stryker will use environment variables instead.");
            }
            if (_flags.HasFlag(OptimizationFlags.SkipUncoveredMutants) || _flags.HasFlag(OptimizationFlags.CoverageBasedTest))
            {
                var collector = new CoverageCollector();
                collector.SetLogger((message) => _logger.LogTrace(message));
                collector.Init(!cantUsePipe);
                var coverageEnvironment = collector.GetEnvironmentVariables();
                var result = LaunchTestProcess(null, coverageEnvironment);

                var data = collector.RetrieveCoverData();
                var coveredMutants = data.Split(";")[0].Split(",", StringSplitOptions.RemoveEmptyEntries);

                CoverageMutants.DeclareCoveredMutants(coveredMutants.Select(int.Parse));
                return result;
            }

            return new TestRunResult(){Success = true};
        }
Esempio n. 2
0
        public TestRunResult CaptureCoverage(IEnumerable <Mutant> mutants, bool cantUseUnloadAppDomain, bool cantUsePipe)
        {
            if (!_flags.HasFlag(OptimizationFlags.SkipUncoveredMutants) &&
                !_flags.HasFlag(OptimizationFlags.CoverageBasedTest))
            {
                return(new TestRunResult(true));
            }

            if (cantUseUnloadAppDomain)
            {
                _logger.LogWarning("Can't capture the test coverage as the target framework does not support 'AppDomain'. ");
                return(new TestRunResult(true));
            }

            if (cantUsePipe)
            {
                _logger.LogWarning("Can't capture the test coverage as the target framework does not support pipes. ");
                return(new TestRunResult(true));
            }

            var collector = new CoverageCollector();

            collector.SetLogger(message => _logger.LogTrace(message));
            var coverageEnvironment = new Dictionary <string, string>();

            coverageEnvironment["Coverage"] = $"pipe:{_server.PipeName}";

            var result = LaunchTestProcess(null, coverageEnvironment);

            if (!WaitOnLck(_lck, () => _lastMessage != null, 5000))
            {
                // Failed to retrieve coverage data for testCase
                return(null);
            }

            var testedMutant = _lastMessage.Split(";")[0].Split(",").Select(int.Parse).ToList();

            foreach (var mutant in mutants)
            {
                mutant.CoveringTests = testedMutant.Contains(mutant.Id) ? TestListDescription.EveryTest() : new TestListDescription(null);
            }

            return(result);
        }