private static void TryAddTestDefinition(HashSet <string> definitions, TestFramework testFramework, MockFramework mockFramework, string className)
        {
            string definition = CreateTestDefinition(testFramework, mockFramework, className);

            if (!definitions.Contains(definition))
            {
                definitions.Add(definition);
            }
        }
        public async System.Threading.Tasks.Task GenerateTestFilesAsync(Project classesProject)
        {
            ProjectItem casesFolder = classesProject.ProjectItems.Item("Cases");

            var    dte = (DTE2)ServiceProvider.GlobalProvider.GetService(typeof(DTE));
            string selfTestFilesDirectory = SolutionUtilities.GetSelfTestDirectoryFromSandbox(dte);
            string targetFolder           = Path.Combine(selfTestFilesDirectory, "Actual");

            if (!Directory.Exists(targetFolder))
            {
                Directory.CreateDirectory(targetFolder);
            }

            var classNames = new List <string>();

            foreach (ProjectItem classItem in casesFolder.ProjectItems)
            {
                classNames.Add(Path.GetFileNameWithoutExtension(classItem.Name));
            }

            // testFW|mockFW|className
            var testDefinitions = new HashSet <string>();

            // First, iterate over all test frameworks with Moq and choose all classes
            MockFramework moqFramework = MockFrameworks.Get(MockFrameworks.MoqName);

            foreach (TestFramework testFramework in TestFrameworks.List)
            {
                foreach (string className in classNames)
                {
                    TryAddTestDefinition(testDefinitions, testFramework, moqFramework, className);
                }
            }

            // Next, iterate over all mock frameworks with VS framework and choose all classes
            TestFramework vsFramework = TestFrameworks.Get(TestFrameworks.VisualStudioName);

            foreach (MockFramework mockFramework in MockFrameworks.List)
            {
                foreach (string className in classNames)
                {
                    TryAddTestDefinition(testDefinitions, vsFramework, mockFramework, className);
                }
            }

            // Last, choose a single file and iterate over all mock frameworks and test frameworks
            string classWithGenericInterface = "ClassWithGenericInterface";

            foreach (TestFramework testFramework in TestFrameworks.List)
            {
                foreach (MockFramework mockFramework in MockFrameworks.List)
                {
                    TryAddTestDefinition(testDefinitions, testFramework, mockFramework, classWithGenericInterface);
                }
            }

            foreach (string testDefinition in testDefinitions)
            {
                string[] parts = testDefinition.Split('|');

                string testFrameworkName = parts[0];
                string mockFrameworkName = parts[1];
                string className         = parts[2];

                await this.GenerateTestFileAsync(classesProject, TestFrameworks.Get(testFrameworkName), MockFrameworks.Get(mockFrameworkName), className, targetFolder);
            }
        }
        public SelfTestDetectionsResult RunDetectionTests(IList <Project> targetProjects)
        {
            var dte = (DTE2)ServiceProvider.GlobalProvider.GetService(typeof(DTE));

            var result = new SelfTestDetectionsResult();

            var frameworkPickerService = new FrameworkPickerService();
            var defaultSettings        = new MockBoilerplateSettings
            {
                PreferredTestFramework = null,
                PreferredMockFramework = null
            };

            var vsMoqSettings = new MockBoilerplateSettings
            {
                PreferredTestFramework = TestFrameworks.Get(TestFrameworks.VisualStudioName),
                PreferredMockFramework = MockFrameworks.Get(MockFrameworks.MoqName)
            };

            var nunitNSubSettings = new MockBoilerplateSettings
            {
                PreferredTestFramework = TestFrameworks.Get(TestFrameworks.NUnitName),
                PreferredMockFramework = MockFrameworks.Get(MockFrameworks.NSubstituteName)
            };

            var testList = new List <SelfTestDetectionTest>
            {
                new SelfTestDetectionTest("AutoMoqTestCases", defaultSettings, TestFrameworks.VisualStudioName, MockFrameworks.AutoMoqName),
                new SelfTestDetectionTest("FakeItEasyTestCases", defaultSettings, TestFrameworks.VisualStudioName, MockFrameworks.FakeItEasyName),
                new SelfTestDetectionTest("NetCoreMoqTestCases", defaultSettings, TestFrameworks.VisualStudioName, MockFrameworks.MoqName),
                new SelfTestDetectionTest("NetCoreNSubstituteTestCases", defaultSettings, TestFrameworks.VisualStudioName, MockFrameworks.NSubstituteName),
                new SelfTestDetectionTest("NetCoreNUnitTestCases", defaultSettings, TestFrameworks.NUnitName, MockFrameworks.MoqName),
                new SelfTestDetectionTest("NetCoreSimpleStubsTestCases", defaultSettings, TestFrameworks.VisualStudioName, MockFrameworks.SimpleStubsName),
                new SelfTestDetectionTest("NetCoreVSRhinoMocksTestCases", defaultSettings, TestFrameworks.VisualStudioName, MockFrameworks.RhinoMocksName),
                new SelfTestDetectionTest("NoFrameworkTestCases", defaultSettings, TestFrameworks.VisualStudioName, MockFrameworks.MoqName),
                new SelfTestDetectionTest("NoFrameworkTestCases", nunitNSubSettings, TestFrameworks.NUnitName, MockFrameworks.NSubstituteName),
                new SelfTestDetectionTest("NSubstituteTestCases", defaultSettings, TestFrameworks.VisualStudioName, MockFrameworks.NSubstituteName),
                new SelfTestDetectionTest("NUnitTestCases", defaultSettings, TestFrameworks.NUnitName, MockFrameworks.MoqName),
                new SelfTestDetectionTest("NUnitUwpTestCases", defaultSettings, TestFrameworks.NUnitName, MockFrameworks.SimpleStubsName),
                new SelfTestDetectionTest("SimpleStubsTestCases", defaultSettings, TestFrameworks.VisualStudioName, MockFrameworks.SimpleStubsName),
                new SelfTestDetectionTest("VSRhinoMocksTestCases", defaultSettings, TestFrameworks.VisualStudioName, MockFrameworks.RhinoMocksName),
                new SelfTestDetectionTest("VSTestCases", defaultSettings, TestFrameworks.VisualStudioName, MockFrameworks.MoqName),
                new SelfTestDetectionTest("XUnitMoqTestCases", defaultSettings, TestFrameworks.XUnitName, MockFrameworks.MoqName),
                new SelfTestDetectionTest("MultipleFrameworkTestCases", defaultSettings, TestFrameworks.NUnitName, MockFrameworks.NSubstituteName),
                new SelfTestDetectionTest("MultipleFrameworkTestCases", vsMoqSettings, TestFrameworks.VisualStudioName, MockFrameworks.MoqName),
            };

            var failures = new List <string>();

            foreach (SelfTestDetectionTest test in testList)
            {
                result.TotalCount++;

                string projectFileName = GetFileNameFromSandboxProjectName(test.ProjectName, dte);

                frameworkPickerService.Settings = test.Settings;

                TestFramework actualTestFramework = frameworkPickerService.FindTestFramework(projectFileName);
                MockFramework actualMockFramework = frameworkPickerService.FindMockFramework(projectFileName);

                if (test.ExpectedTestFramework != actualTestFramework.Name)
                {
                    failures.Add($"Expected {test.ExpectedTestFramework} test framework for {test.ProjectName} but got {actualTestFramework.Name}. (Preferred Framework: {test.Settings.PreferredTestFramework})");
                }
                else if (test.ExpectedMockFramework != actualMockFramework.Name)
                {
                    failures.Add($"Expected {test.ExpectedMockFramework} mock framework for {test.ProjectName} but got {actualMockFramework.Name}. (Preferred Framework: {test.Settings.PreferredMockFramework})");
                }
                else
                {
                    result.SucceededCount++;
                }
            }

            result.Failures = failures;

            return(result);
        }
Esempio n. 4
0
 private static string GetPersonalTemplateSettingsKey(TestFramework testFramework, MockFramework mockFramework, TemplateType templateType)
 {
     return("Template_" + BoilerplateSettings.GetTemplateSettingsKey(testFramework, mockFramework, templateType));
 }
 private static string GetDictionaryKey(TestFramework testFramework, MockFramework mockFramework, TemplateType templateType)
 {
     return($"{testFramework.Name}_{mockFramework.Name}_{templateType}");
 }
 /// <summary>
 /// Saves the template to the dialog holding area. It will take effect when Apply() is called.
 /// </summary>
 /// <param name="testFramework">The test framework the template applies to.</param>
 /// <param name="mockFramework">The mock framework the template applies to.</param>
 /// <param name="templateType">The template type.</param>
 /// <param name="template">The template to save.</param>
 private void SaveTemplateToDialogHolding(TestFramework testFramework, MockFramework mockFramework, TemplateType templateType, string template)
 {
     this.templateHoldingDictionary[GetDictionaryKey(testFramework, mockFramework, templateType)] = template;
 }