コード例 #1
0
ファイル: MuTestOptions.cs プロジェクト: mdaniyalkhan/MuTest
        private void ValidateTestClasses()
        {
            if (!string.IsNullOrWhiteSpace(TestClassParameter) &&
                !MultipleTestClasses.Any())
            {
                MultipleSourceClasses
                .ForEach(x => MultipleTestClasses.Add(TestClassParameter));
                return;
            }

            var isAllClassesFound = true;
            var testClasses       = new List <string>();

            foreach (var testClass in MultipleTestClasses)
            {
                var classes = new FileInfo(TestProjectParameter).GetProjectFiles();
                var file    = classes.FindKey(testClass);
                if (!string.IsNullOrWhiteSpace(file))
                {
                    var path = new FileInfo(classes[file]);
                    if (path.Exists)
                    {
                        testClasses.Add(path.FullName);
                    }
                    else
                    {
                        isAllClassesFound = false;
                        break;
                    }
                }
                else
                {
                    isAllClassesFound = false;
                    break;
                }
            }

            if (isAllClassesFound)
            {
                MultipleTestClasses.Clear();
                MultipleTestClasses.AddRange(testClasses);
                return;
            }

            throw new MuTestInputException(ErrorMessage, $"One or more Test class file(s) (.cs) are not exist. {CliOptions.MultipleTestClasses.ArgumentDescription}");
        }
コード例 #2
0
        public MuTestOptions Build()
        {
            var muTestOptions = new MuTestOptions
            {
                SourceProjectParameter        = GetOption(SourceProject.Value(), CliOptions.SourceProject),
                SourceProjectLibraryParameter = GetOption(SourceLib.Value(), CliOptions.SourceLib),
                SourceClassParameter          = GetOption(SourceClass.Value(), CliOptions.SourceClass),
                TestProjectParameter          = GetOption(TestProject.Value(), CliOptions.TestProject),
                TestProjectLibraryParameter   = GetOption(TestLib.Value(), CliOptions.TestLib),
                TestClassParameter            = GetOption(TestClass.Value(), CliOptions.TestClass),
                ExecuteAllTests               = GetOption(ExecuteAllTests.Value(), CliOptions.ExecuteAllTests),
                SkipTestProjectBuild          = GetOption(SkipTestProjectBuild.Value(), CliOptions.SkipTestProjectBuild),
                IncludePartialClasses         = GetOption(IncludePartialClasses.Value(), CliOptions.IncludePartialClasses),
                AnalyzeExternalCoveredClasses = GetOption(AnalyzeExternalCoveredClasses.Value(), CliOptions.AnalyzeExternalCoveredClasses),
                IncludeNestedClasses          = GetOption(IncludeNestedClasses.Value(), CliOptions.IncludeNestedClasses),
                UseClassFilter              = GetOption(UseClassFilter.Value(), CliOptions.UseClassFilter),
                X64TargetPlatform           = GetOption(X64.Value(), CliOptions.X64TargetPlatform),
                BuildInReleaseModeParameter = GetOption(ReleaseMode.Value(), CliOptions.BuildInReleaseMode),
                EnableDiagnostics           = GetOption(Diagnostics.Value(), CliOptions.EnableDiagnostics),
                OptimizeTestProject         = GetOption(OptimizeTestProject.Value(), CliOptions.OptimizeTestProject),
                ConcurrentTestRunners       = GetOption(Parallel.Value(), CliOptions.Parallel),
                SurvivedThreshold           = GetOption(SurvivedThreshold.Value(), CliOptions.SurvivedThreshold),
                KilledThreshold             = GetOption(KilledThreshold.Value(), CliOptions.KilledThreshold),
                OutputPathParameter         = GetOption(OutputPath.Value(), CliOptions.OutputPath),
                NoCoverage             = GetOption(NoCoverage.Value(), CliOptions.NoCoverage),
                RegEx                  = GetOption(RegEx.Value(), CliOptions.Regex),
                Specific               = GetOption(Specific.Value(), CliOptions.Specific),
                ClassName              = GetOption(ClassName.Value(), CliOptions.ClassName),
                ProcessWholeProject    = GetOption(ProcessWholeProject.Value(), CliOptions.ProcessWholeProject),
                TestExecutionThreshold = GetOption(FindTestTime.Value(), CliOptions.TestExecutionThreshold),
                MutantsPerLine         = GetOption(MutantsPerLine.Value(), CliOptions.MutantsPerLine)
            };

            muTestOptions
            .MultipleSourceClasses
            .AddRange(GetOption(MultipleSourceClasses.Value(), CliOptions.MultipleSourceClasses).Distinct());
            muTestOptions
            .MultipleTestClasses
            .AddRange(GetOption(MultipleTestClasses.Value(), CliOptions.MultipleTestClasses).Distinct());

            muTestOptions.ValidateOptions();
            return(muTestOptions);
        }
コード例 #3
0
ファイル: MuTestOptions.cs プロジェクト: mdaniyalkhan/MuTest
        private void ValidateRequiredParameters()
        {
            if (string.IsNullOrWhiteSpace(SourceProjectParameter) ||
                !SourceProjectParameter.EndsWith(".csproj") ||
                !File.Exists(SourceProjectParameter))
            {
                throw new MuTestInputException(ErrorMessage, $"The Source Project File (.csproj) is required. Valid Options are {CliOptions.SourceProject.ArgumentShortName}");
            }

            if (string.IsNullOrWhiteSpace(TestProjectParameter) ||
                !TestProjectParameter.EndsWith(".csproj") ||
                !File.Exists(TestProjectParameter)
                )
            {
                throw new MuTestInputException(ErrorMessage, $"The Test Project File (.csproj) is required. Valid Options are {CliOptions.TestProject.ArgumentShortName}");
            }

            if (string.IsNullOrWhiteSpace(ProcessWholeProject))
            {
                if (string.IsNullOrWhiteSpace(ClassName) && !MultipleSourceClasses.Any())
                {
                    throw new MuTestInputException(ErrorMessage,
                                                   $"Source class file name or fully qualified name is required. Valid Options are {CliOptions.SourceClass.ArgumentShortName} or process whole project using {CliOptions.ProcessWholeProject.ArgumentShortName}");
                }

                if (string.IsNullOrWhiteSpace(TestClassParameter) && !MultipleTestClasses.Any())
                {
                    throw new MuTestInputException(ErrorMessage, $"Test class file name (.cs) is required. Valid Options are {CliOptions.TestClass.ArgumentShortName}");
                }

                if (string.IsNullOrWhiteSpace(TestClassParameter) &&
                    MultipleSourceClasses.Count != MultipleTestClasses.Count)
                {
                    throw new MuTestInputException(ErrorMessage,
                                                   $"Number of source Classes Should be equal to number of test classes Count[{CliOptions.MultipleSourceClasses.ArgumentShortName}] = Count[{CliOptions.MultipleTestClasses.ArgumentShortName}]");
                }
            }
        }
コード例 #4
0
ファイル: MuTestOptions.cs プロジェクト: mdaniyalkhan/MuTest
        private void ValidateTestClass()
        {
            if (File.Exists(TestClassParameter) ||
                MultipleTestClasses.Any())
            {
                return;
            }

            var classes = new FileInfo(TestProjectParameter).GetProjectFiles();
            var file    = classes.FindKey(TestClassParameter);

            if (!string.IsNullOrWhiteSpace(file))
            {
                var path = new FileInfo(classes[file]);
                if (path.Exists)
                {
                    TestClassParameter = path.FullName;
                    return;
                }
            }

            throw new MuTestInputException(ErrorMessage, $"Test class file (.cs) is not exist. {CliOptions.TestClass.ArgumentDescription}");
        }