Esempio n. 1
0
        private static void DiscoverTests(TestEnvironment testEnv, string[] sources, MockRunSettings runSettings, TestInfo[] expectedTests)
        {
            var discoveryContext = new MockDiscoveryContext(runSettings);
            var discoverySink    = new MockTestCaseDiscoverySink();
            var logger           = new MockMessageLogger();

            ITestDiscoverer discoverer = null;

            switch (testEnv.TestFramework)
            {
            case FrameworkPytest:
                discoverer = new PytestTestDiscoverer();
                break;

            case FrameworkUnittest:
                discoverer = new UnittestTestDiscoverer();
                break;

            default:
                Assert.Fail($"unknown testframework: {testEnv.TestFramework.ToString()}");
                break;
            }

            discoverer.DiscoverTests(sources, discoveryContext, logger, discoverySink);

            ValidateDiscoveredTests(testEnv.TestFramework, discoverySink.Tests, expectedTests);
        }
Esempio n. 2
0
        public void DiscoverUnitTestSyntaxErrorPartialResults()
        {
            // one file has a valid passing test,
            // the other has an unknown module import at global scope
            var testEnv = TestEnvironment.GetOrCreate(Version, FrameworkUnittest);

            FileUtils.CopyDirectory(TestData.GetPath("TestData", "TestDiscoverer", "SyntaxErrorUnittest"), testEnv.SourceFolderPath);

            var testFilePath1 = Path.Combine(testEnv.SourceFolderPath, "test_basic_ut.py");
            var testFilePath2 = Path.Combine(testEnv.SourceFolderPath, "test_syntax_error_ut.py");

            var expectedTests = new[] {
                new TestInfo("test_ut_fail", "test_basic_ut.py::TestClassUT::test_ut_fail", testFilePath1, 4),
                new TestInfo("test_ut_pass", "test_basic_ut.py::TestClassUT::test_ut_pass", testFilePath1, 7),
            };

            var runSettings = new MockRunSettings(
                new MockRunSettingsXmlBuilder(testEnv.TestFramework, testEnv.InterpreterPath, testEnv.ResultsFolderPath, testEnv.SourceFolderPath)
                .WithTestFile(testFilePath1)
                .WithTestFile(testFilePath2)
                .ToXml()
                );

            var discoveryContext = new MockDiscoveryContext(runSettings);
            var discoverySink    = new MockTestCaseDiscoverySink();
            var logger           = new MockMessageLogger();
            var discoverer       = new UnittestTestDiscoverer();

            discoverer.DiscoverTests(new[] { testFilePath1, testFilePath2 }, discoveryContext, logger, discoverySink);

            ValidateDiscoveredTests(testEnv.TestFramework, discoverySink.Tests, expectedTests);
        }
Esempio n. 3
0
        public void DiscoverUnittestTimeoutError()
        {
            var testEnv = TestEnvironment.GetOrCreate(Version, FrameworkUnittest);

            var testFilePath = Path.Combine(testEnv.SourceFolderPath, "test_ut.py");

            File.Copy(TestData.GetPath("TestData", "TestDiscoverer", "Timeout", "test_timeout_ut.py"), testFilePath);

            int waitTimeInSeconds = 1;
            var runSettings       = new MockRunSettings(
                new MockRunSettingsXmlBuilder(testEnv.TestFramework, testEnv.InterpreterPath, testEnv.ResultsFolderPath, testEnv.SourceFolderPath, waitTimeInSeconds)
                .WithTestFilesFromFolder(testEnv.SourceFolderPath)
                .ToXml()
                );

            var discoveryContext = new MockDiscoveryContext(runSettings);
            var discoverySink    = new MockTestCaseDiscoverySink();
            var logger           = new MockMessageLogger();
            var discoverer       = new UnittestTestDiscoverer();

            discoverer.DiscoverTests(new[] { testFilePath }, discoveryContext, logger, discoverySink);
            Assert.AreEqual(0, discoverySink.Tests.Count);

            var errors = string.Join(Environment.NewLine, logger.GetErrors());

            AssertUtil.Contains(
                errors,
                Strings.PythonTestDiscovererTimeoutErrorMessage
                );
        }
Esempio n. 4
0
        public void UnnitShouldThrowNullResults()
        {
            var discoverer = new UnittestTestDiscoverer();
            var testcases  = discoverer.ParseDiscoveryResults(null, projectHome: "dummypath");

            testcases.Any();
        }
Esempio n. 5
0
        private MockMessageLogger NewMethod()
        {
            TestEnvironment testEnv = TestEnvironment.GetOrCreate(Version, FrameworkUnittest);

            FileUtils.CopyDirectory(TestData.GetPath("TestData", "TestDiscoverer", "SyntaxErrorUnittest"), testEnv.SourceFolderPath);

            var testFilePath1 = Path.Combine(testEnv.SourceFolderPath, "test_basic_ut.py");
            var testFilePath2 = Path.Combine(testEnv.SourceFolderPath, "test_syntax_error_ut.py");

            TestInfo[] expectedTests = new[] {
                new TestInfo("test_ut_fail", "test_basic_ut.py::TestClassUT::test_ut_fail", testFilePath1, 4),
                new TestInfo("test_ut_pass", "test_basic_ut.py::TestClassUT::test_ut_pass", testFilePath1, 7),
            };

            MockRunSettings runSettings = new MockRunSettings(
                new MockRunSettingsXmlBuilder(testEnv.TestFramework, testEnv.InterpreterPath, testEnv.ResultsFolderPath, testEnv.SourceFolderPath)
                .WithTestFile(testFilePath1)
                .WithTestFile(testFilePath2)
                .ToXml()
                );

            MockDiscoveryContext      discoveryContext = new MockDiscoveryContext(runSettings);
            MockTestCaseDiscoverySink discoverySink    = new MockTestCaseDiscoverySink();
            MockMessageLogger         logger           = new MockMessageLogger();
            var discoverer = new UnittestTestDiscoverer();

            discoverer.DiscoverTests(new[] { testFilePath1, testFilePath2 }, discoveryContext, logger, discoverySink);
            return(logger);
        }
Esempio n. 6
0
        public void UnittestShouldHandleEmptyListResults()
        {
            var discoverer = new UnittestTestDiscoverer();
            var results    = new List <UnittestDiscoveryResults>();
            var testcases  = discoverer.ParseDiscoveryResults(results, projectHome: "dummypath");

            Assert.IsFalse(testcases.Any());
        }
Esempio n. 7
0
        public void DiscoverUnitTestSyntaxErrorLogErrors()
        {
            // one file has a valid passing test,
            // the other has an unknown module import at global scope
            var testEnv = TestEnvironment.GetOrCreate(Version, FrameworkUnittest);

            FileUtils.CopyDirectory(TestData.GetPath("TestData", "TestDiscoverer", "SyntaxErrorUnittest"), testEnv.SourceFolderPath);

            var testFilePath1 = Path.Combine(testEnv.SourceFolderPath, "test_basic_ut.py");
            var testFilePath2 = Path.Combine(testEnv.SourceFolderPath, "test_syntax_error_ut.py");

            var expectedTests = new[] {
                new TestInfo("test_ut_fail", "test_basic_ut.py::TestClassUT::test_ut_fail", testFilePath1, 4),
                new TestInfo("test_ut_pass", "test_basic_ut.py::TestClassUT::test_ut_pass", testFilePath1, 7),
            };

            var runSettings = new MockRunSettings(
                new MockRunSettingsXmlBuilder(testEnv.TestFramework, testEnv.InterpreterPath, testEnv.ResultsFolderPath, testEnv.SourceFolderPath)
                .WithTestFile(testFilePath1)
                .WithTestFile(testFilePath2)
                .ToXml()
                );

            var discoveryContext = new MockDiscoveryContext(runSettings);
            var discoverySink    = new MockTestCaseDiscoverySink();
            var logger           = new MockMessageLogger();
            var discoverer       = new UnittestTestDiscoverer();

            discoverer.DiscoverTests(new[] { testFilePath1, testFilePath2 }, discoveryContext, logger, discoverySink);

            var errors = string.Join(Environment.NewLine, logger.GetErrors());

            if (Version.Version > PythonLanguageVersion.V27)
            {
                AssertUtil.Contains(errors,
                                    "SyntaxError: invalid syntax"
                                    );
            }
            else
            {
                Assert.Inconclusive("Python 2.7 unittest errors are not currently being printed to error logs");
            }
        }
Esempio n. 8
0
        public void RunTests(IEnumerable <string> sources, IRunContext runContext, IFrameworkHandle frameworkHandle)
        {
            if (sources == null)
            {
                throw new ArgumentNullException(nameof(sources));
            }

            if (runContext == null)
            {
                throw new ArgumentNullException(nameof(runContext));
            }

            if (frameworkHandle == null)
            {
                throw new ArgumentNullException(nameof(frameworkHandle));
            }

            _cancelRequested.Reset();

            var sourceToProjSettings = RunSettingsUtil.GetSourceToProjSettings(runContext.RunSettings, filterType: TestFrameworkType.UnitTest);
            var testColletion        = new TestCollection();

            foreach (var testGroup in sources.GroupBy(x => sourceToProjSettings[x]))
            {
                var settings = testGroup.Key;

                try {
                    var discovery = new UnittestTestDiscoverer();
                    discovery.DiscoverTests(testGroup, settings, frameworkHandle, testColletion);
                } catch (Exception ex) {
                    frameworkHandle.SendMessage(TestMessageLevel.Error, ex.Message);
                }

                if (_cancelRequested.WaitOne(0))
                {
                    return;
                }
            }

            RunTestCases(testColletion.Tests, runContext, frameworkHandle);
        }