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"); } }