public void GetAnalysisResult_GivenOneEdgeCasePassedWithNoEdgeCaseHintAttribute_ShouldReturnListWithEdgeCaseAndEdgeCaseMessageSetToNull()
        {
            //---------------Set up test pack-------------------
            var playerTestsLevelAnalyser = Substitute.For <IPlayerTestsLevelAnalyser>();
            var analyser = new PlayerTestsEdgeCaseCoverageAnalyser(playerTestsLevelAnalyser);
            var goldenImplementation1     = new GoldenImplementation(new ClassWithShouldFailEdgeCaseTestAttributesWithNoHint().GetType());
            var goldenImplementation2     = new GoldenImplementation(new ClassWithAttributes().GetType());
            var implementationTestResults = CreateImplementationTestResults(goldenImplementation1, CreateTestResult(true));

            implementationTestResults.Add(goldenImplementation2, new ITestResult[] { CreateTestResult(true) });
            playerTestsLevelAnalyser.GetAnalysisResult(implementationTestResults)
            .Returns(new PlayerTestsLevelResult {
                FirstGoldenImplementationPassingAllTests = goldenImplementation1
            });
            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            var results = analyser.GetAnalysisResult(implementationTestResults);

            //---------------Test Result -----------------------
            Assert.AreEqual(1, results.Count);
            Assert.IsNull(results[0].EdgeCaseMessage);
            Assert.AreEqual(2, results[0].Level);
            Assert.AreEqual(false, results[0].IsCovered);
        }
        public void GetAnalysisResult_GivenPassingTestInNextLevelAndEdgeCaseFailingInPreviousLevel_ShouldReturnListWithEdgeCase()
        {
            //---------------Set up test pack-------------------
            var playerTestsLevelAnalyser = Substitute.For <IPlayerTestsLevelAnalyser>();
            var analyser = new PlayerTestsEdgeCaseCoverageAnalyser(playerTestsLevelAnalyser);
            var goldenImplementation2     = new GoldenImplementation(new ClassWithAttributes().GetType());
            var implementationTestResults = CreateImplementationTestResults(goldenImplementation2, CreateTestResult(true));

            implementationTestResults.Add(new GoldenImplementation(new AnotherClassWithAttributes().GetType()), new ITestResult[] { CreateTestResult(true) });
            implementationTestResults.Add(new GoldenImplementation(new AnotherClassWithShouldFailEdgeCaseTestAttributes().GetType()), new ITestResult[] { CreateTestResult(true) });

            playerTestsLevelAnalyser.GetAnalysisResult(implementationTestResults)
            .Returns(new PlayerTestsLevelResult {
                FirstGoldenImplementationPassingAllTests = goldenImplementation2
            });
            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            var results = analyser.GetAnalysisResult(implementationTestResults);

            //---------------Test Result -----------------------
            Assert.AreEqual(1, results.Count);
            Assert.AreEqual("This is a another hint", results[0].EdgeCaseMessage);
            Assert.AreEqual(1, results[0].Level);
            Assert.AreEqual(false, results[0].IsCovered);
        }
        public void GetAnalysisResult_GivenNoEdgeCases_ShouldReturnEmptyList()
        {
            //---------------Set up test pack-------------------
            var playerTestsLevelAnalyser = Substitute.For <IPlayerTestsLevelAnalyser>();
            var analyser                  = new PlayerTestsEdgeCaseCoverageAnalyser(playerTestsLevelAnalyser);
            var goldenImplementation      = new GoldenImplementation(new ClassWithAttributes().GetType());
            var implementationTestResults = CreateImplementationTestResults(goldenImplementation, CreateTestResult(true));

            playerTestsLevelAnalyser.GetAnalysisResult(implementationTestResults)
            .Returns(new PlayerTestsLevelResult {
                FirstGoldenImplementationPassingAllTests = goldenImplementation
            });
            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            var results = analyser.GetAnalysisResult(implementationTestResults);

            //---------------Test Result -----------------------
            CollectionAssert.IsEmpty(results);
        }
        public void GetAnalysisResult_GivenPassingTestInCurrentLevelAndEdgeCaseFailingInNextLevel_ShouldReturnEmptyList()
        {
            //---------------Set up test pack-------------------
            var playerTestsLevelAnalyser = Substitute.For <IPlayerTestsLevelAnalyser>();
            var analyser = new PlayerTestsEdgeCaseCoverageAnalyser(playerTestsLevelAnalyser);
            var goldenImplementation2     = new GoldenImplementation(new ClassWithAttributes().GetType());
            var implementationTestResults = CreateImplementationTestResults(goldenImplementation2, CreateTestResult(true));

            implementationTestResults.Add(new GoldenImplementation(new Step3WithAttributes().GetType()), new ITestResult[] { CreateTestResult(false) });
            implementationTestResults.Add(new GoldenImplementation(new Step3WithShouldFailEdgeCaseTestAttributes().GetType()), new ITestResult[] { CreateTestResult(true) });

            playerTestsLevelAnalyser.GetAnalysisResult(implementationTestResults)
            .Returns(new PlayerTestsLevelResult {
                FirstGoldenImplementationPassingAllTests = goldenImplementation2
            });
            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            var results = analyser.GetAnalysisResult(implementationTestResults);

            //---------------Test Result -----------------------
            CollectionAssert.IsEmpty(results);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Runs the player's tests against the golden sut implementations and determines
        /// golden implementation with the highest test step attribute which passes all the
        /// player tests (amongst other things)
        /// </summary>
        public PlayerTestsRunResult Run()
        {
            var testMethods = _testMethodsRetriever.GetTestMethods(_playerTestFixtureType);
            var goldenImplementationTestResults = GetGoldenImplementationTestResults(testMethods);

            var testLevelAnalyser        = new PlayerTestsLevelAnalyser();
            var playerTestsLevelResult   = testLevelAnalyser.GetAnalysisResult(goldenImplementationTestResults);
            var edgeCaseCoverageAnalyser = new PlayerTestsEdgeCaseCoverageAnalyser(testLevelAnalyser);
            var testsEdgeCoverageResults = edgeCaseCoverageAnalyser.GetAnalysisResult(goldenImplementationTestResults, _implementationLevel);

            var numberOfTestsImplemented      = testMethods.Count();
            var hasTestCaseAttribute          = testMethods.Any(method => method.HasTestCaseAttribute);
            var hasExpectedExceptionAttribute = testMethods.Any(method => method.HasExpectedExceptionAttribute);

            return(new PlayerTestsRunResult
            {
                Level = playerTestsLevelResult.Level,
                NumberOfTestsImplemented = numberOfTestsImplemented,
                PlayerTestsEdgeCoverageResults = testsEdgeCoverageResults,
                HasTestCaseAttribute = hasTestCaseAttribute,
                HasExpectedExceptionAttribute = hasExpectedExceptionAttribute
            });
        }