示例#1
0
        public void ShouldReportResultsToAppVeyorBuildWorkerApi()
        {
            var results = new List<AppVeyorListener.TestResult>();

            var listener = new AppVeyorListener("http://localhost:4567", (uri, mediaType, content) =>
            {
                uri.ShouldBe("http://localhost:4567/api/tests");
                mediaType.ShouldBe("application/json");

                results.Add(Deserialize<AppVeyorListener.TestResult>(content));
            });

            using (var console = new RedirectedConsole())
            {
                Run(listener);

                console.Lines()
                    .ShouldBe(
                        "Console.Out: Fail",
                        "Console.Error: Fail",
                        "Console.Out: FailByAssertion",
                        "Console.Error: FailByAssertion",
                        "Console.Out: Pass",
                        "Console.Error: Pass");
            }

            results.Count.ShouldBe(5);

            foreach (var result in results)
            {
                result.TestFramework.ShouldBe("Fixie");

#if NET452
                result.FileName.ShouldBe("Fixie.Tests.exe");
#else
                result.FileName.ShouldBe("Fixie.Tests.dll");
#endif
            }

            var fail = results[0];
            var failByAssertion = results[1];
            var pass = results[2];
            var skipWithReason = results[3];
            var skipWithoutReason = results[4];

            skipWithReason.TestName.ShouldBe(TestClass + ".SkipWithReason");
            skipWithReason.Outcome.ShouldBe("Skipped");
            int.Parse(skipWithReason.DurationMilliseconds).ShouldBeGreaterThanOrEqualTo(0);
            skipWithReason.ErrorMessage.ShouldBe("⚠ Skipped with reason.");
            skipWithReason.ErrorStackTrace.ShouldBe(null);
            skipWithReason.StdOut.ShouldBe("");

            skipWithoutReason.TestName.ShouldBe(TestClass + ".SkipWithoutReason");
            skipWithoutReason.Outcome.ShouldBe("Skipped");
            int.Parse(skipWithoutReason.DurationMilliseconds).ShouldBeGreaterThanOrEqualTo(0);
            skipWithoutReason.ErrorMessage.ShouldBe(null);
            skipWithoutReason.ErrorStackTrace.ShouldBe(null);
            skipWithoutReason.StdOut.ShouldBe("");

            fail.TestName.ShouldBe(TestClass + ".Fail");
            fail.Outcome.ShouldBe("Failed");
            int.Parse(fail.DurationMilliseconds).ShouldBeGreaterThanOrEqualTo(0);
            fail.ErrorMessage.ShouldBe("'Fail' failed!");
            fail.ErrorStackTrace
                .CleanStackTraceLineNumbers()
                .Lines()
                .ShouldBe("Fixie.Tests.FailureException", At("Fail()"));
            fail.StdOut.Lines().ShouldBe("Console.Out: Fail", "Console.Error: Fail");

            failByAssertion.TestName.ShouldBe(TestClass + ".FailByAssertion");
            failByAssertion.Outcome.ShouldBe("Failed");
            int.Parse(failByAssertion.DurationMilliseconds).ShouldBeGreaterThanOrEqualTo(0);
            failByAssertion.ErrorMessage.Lines().ShouldBe(
                "Expected: 2",
                "Actual:   1");
            failByAssertion.ErrorStackTrace
                .CleanStackTraceLineNumbers()
                .Lines()
                .ShouldBe("Fixie.Tests.Assertions.AssertException", At("FailByAssertion()"));
            failByAssertion.StdOut.Lines().ShouldBe("Console.Out: FailByAssertion", "Console.Error: FailByAssertion");

            pass.TestName.ShouldBe(TestClass + ".Pass");
            pass.Outcome.ShouldBe("Passed");
            int.Parse(pass.DurationMilliseconds).ShouldBeGreaterThanOrEqualTo(0);
            pass.ErrorMessage.ShouldBe(null);
            pass.ErrorStackTrace.ShouldBe(null);
            pass.StdOut.Lines().ShouldBe("Console.Out: Pass", "Console.Error: Pass");
        }
        public void ShouldReportResultsToAppVeyorBuildWorkerApi()
        {
            var results = new List <AppVeyorListener.TestResult>();

            var httpClient = new HttpClient(new FakeHandler(request =>
            {
                request.ShouldNotBeNull();
                request.RequestUri.AbsoluteUri.ShouldEqual("http://localhost:4567/api/tests");
                request.Headers.Accept.ShouldContain(new MediaTypeWithQualityHeaderValue("application/json"));
                request.Content.Headers.ContentType.ToString().ShouldEqual("application/json; charset=utf-8");

                var requestContent = request.Content.ReadAsStringAsync().Result;
                results.Add(new JavaScriptSerializer().Deserialize <AppVeyorListener.TestResult>(requestContent));

                return(new HttpResponseMessage {
                    StatusCode = HttpStatusCode.Accepted
                });
            }));

            using (var console = new RedirectedConsole())
                using (var listener = new AppVeyorListener("http://localhost:4567", httpClient))
                {
                    var convention = SelfTestConvention.Build();
                    convention.CaseExecution.Skip(x => x.Method.Has <SkipAttribute>(), x => x.Method.GetCustomAttribute <SkipAttribute>().Reason);
                    convention.Parameters.Add <InputAttributeParameterSource>();

                    typeof(PassFailTestClass).Run(listener, convention);

                    var testClass = typeof(PassFailTestClass).FullName;

                    console.Lines()
                    .ShouldEqual(
                        "Console.Out: Fail",
                        "Console.Error: Fail",
                        "Console.Out: Pass",
                        "Console.Error: Pass");

                    results.Count.ShouldEqual(4);

                    foreach (var result in results)
                    {
                        result.testFramework.ShouldEqual("Fixie");
                        result.fileName.ShouldEqual("Fixie.Tests.dll");
                    }

                    results[0].testName.ShouldEqual(testClass + ".SkipWithReason");
                    results[0].outcome.ShouldEqual("Skipped");
                    results[0].durationMilliseconds.ShouldEqual("0");
                    results[0].ErrorMessage.ShouldEqual("Skipped with reason.");
                    results[0].ErrorStackTrace.ShouldBeNull();
                    results[0].StdOut.ShouldBeNull();

                    results[1].testName.ShouldEqual(testClass + ".SkipWithoutReason");
                    results[1].outcome.ShouldEqual("Skipped");
                    results[1].durationMilliseconds.ShouldEqual("0");
                    results[1].ErrorMessage.ShouldBeNull();
                    results[1].ErrorStackTrace.ShouldBeNull();
                    results[1].StdOut.ShouldBeNull();

                    results[2].testName.ShouldEqual(testClass + ".Fail");
                    results[2].outcome.ShouldEqual("Failed");
                    int.Parse(results[2].durationMilliseconds).ShouldBeGreaterThanOrEqualTo(0);
                    results[2].ErrorMessage.ShouldEqual("Fixie.Tests.FailureException");
                    results[2].ErrorStackTrace.Lines().Select(CleanBrittleValues)
                    .ShouldEqual("'Fail' failed!",
                                 "   at Fixie.Tests.ConsoleRunner.AppVeyorListenerTests.PassFailTestClass.Fail() in " + PathToThisFile() + ":line #");
                    results[2].StdOut.Lines().ShouldEqual("Console.Out: Fail", "Console.Error: Fail");

                    results[3].testName.ShouldEqual(testClass + ".Pass(123)");
                    results[3].outcome.ShouldEqual("Passed");
                    int.Parse(results[3].durationMilliseconds).ShouldBeGreaterThanOrEqualTo(0);
                    results[3].ErrorMessage.ShouldBeNull();
                    results[3].ErrorStackTrace.ShouldBeNull();
                    results[3].StdOut.Lines().ShouldEqual("Console.Out: Pass", "Console.Error: Pass");
                }
        }