public void Will_get_map_line_numbers_to_test_result() { var reader = new TestableTestCaseStreamReader(); var json = JsonStreamEvents.FileStartEventJson + JsonStreamEvents.TestStartEventJson + JsonStreamEvents.TestDoneEventJson; var referencedFile = new ReferencedFile { IsFileUnderTest = true, Path = "inputTestFile", FilePositions = new FilePositions() }; referencedFile.FilePositions.Add(1, 3, "test"); var context = new TestContext { TestHarnessPath = "htmlTestFile", ReferencedFiles = new[] { referencedFile } }; var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); TestCase result = null; callback.Setup(x => x.TestFinished(It.IsAny <TestCase>())).Callback <TestCase>(t => result = t); reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false); Assert.NotNull(result); Assert.Equal("module", result.ModuleName); Assert.Equal("test", result.TestName); Assert.Equal(1, result.Line); Assert.Equal(3, result.Column); }
public void Will_set_line_position_to_zero_when_no_matching_file_position() { var reader = new TestableTestCaseStreamReader(); var json = @"#_#TestDone#_# {""type"":""TestDone"",""testCase"":{""moduleName"":""module"",""testName"":""test"",""testResults"":[]}}"; var referencedFile = new ReferencedFile { IsFileUnderTest = true, Path = "inputTestFile", FilePositions = new FilePositions() }; var context = new TestContext { TestHarnessPath = "htmlTestFile", InputTestFile = "inputTestFile", ReferencedFiles = new[] { referencedFile } }; var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); TestCase result = null; callback.Setup(x => x.TestFinished(It.IsAny <TestCase>())).Callback <TestCase>(t => result = t); reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false); Assert.NotNull(result); Assert.Equal("module", result.ModuleName); Assert.Equal("test", result.TestName); Assert.Equal(0, result.Line); Assert.Equal(0, result.Column); }
public void Will_place_not_found_test_in_first_context_given_no_matches_and_no_current_file_match() { // This case covers the scenario where the test names are not found in filePosition map // what should happen is when we hit the first one we don't know which file it is from so we *assume* the first // one. Then when we find the same test name again we realize we can't assign it to the current file // so we assign it to the next var reader = new TestableTestCaseStreamReader(); var jsonFile1 = JsonStreamEvents.BuildTestEventFile(Tuple.Create("", "test1")); var jsonFile2 = JsonStreamEvents.BuildTestEventFile(Tuple.Create("", "test1")); var json = jsonFile1 + jsonFile2; var context = reader.BuildContext(Tuple.Create("file1", "testNoMatch", 1, 1), Tuple.Create("file2", "testNoMatch", 2, 2)); var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); var summaries = reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false); Assert.Equal(1, summaries[0].Tests.Count); Assert.Equal("file1", summaries[0].Tests[0].InputTestFile); Assert.Equal("test1", summaries[0].Tests[0].TestName); Assert.Equal(1, summaries[1].Tests.Count); Assert.Equal("file2", summaries[1].Tests[0].InputTestFile); Assert.Equal("test1", summaries[1].Tests[0].TestName); }
public void Will_put_test_case_in_summary() { var reader = new TestableTestCaseStreamReader(); var json = @" #_#TestDone#_# {""type"":""TestDone"",""testCase"":{""moduleName"":""module"",""testName"":""test"",""testResults"":[{""message"":""bad"",""passed"":false,""actual"":4,""expected"":5}]}} "; var context = new TestContext { InputTestFile = "file" }; var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); var summary = reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false); Assert.Equal(1, summary.Tests.Count); Assert.Equal(1, summary.Tests[0].TestResults.Count); Assert.Equal("file", summary.Tests[0].InputTestFile); Assert.Equal("module", summary.Tests[0].ModuleName); Assert.Equal("test", summary.Tests[0].TestName); Assert.False(summary.Tests[0].Passed); Assert.False(summary.Tests[0].TestResults[0].Passed); Assert.Equal("4", summary.Tests[0].TestResults[0].Actual); Assert.Equal("5", summary.Tests[0].TestResults[0].Expected); Assert.Equal("bad", summary.Tests[0].TestResults[0].Message); }
public void Will_set_line_position_to_zero_when_no_matching_file_position() { var reader = new TestableTestCaseStreamReader(); var json = JsonStreamEvents.FileStartEventJson + JsonStreamEvents.TestStartEventJson + JsonStreamEvents.TestDoneEventJson; var referencedFile = new ReferencedFile { IsFileUnderTest = true, Path = "inputTestFile", FilePositions = new FilePositions() }; var context = new TestContext { TestHarnessPath = "htmlTestFile", ReferencedFiles = new[] { referencedFile } }; var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStreamStringSource(new Mock <IProcessWrapper>().Object, stream, 1000); var callback = new Mock <ITestMethodRunnerCallback>(); TestCase result = null; callback.Setup(x => x.TestFinished(It.Is <TestContext>(testContext => testContext == context), It.IsAny <TestCase>())).Callback <TestContext, TestCase>((c, t) => result = t); reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object); Assert.NotNull(result); Assert.Equal("module", result.ModuleName); Assert.Equal("test", result.TestName); Assert.Equal(0, result.Line); Assert.Equal(0, result.Column); }
public void Will_throw_argument_null_exception_if_stream_is_null() { var reader = new TestableTestCaseStreamReader(); var model = Record.Exception(() => reader.ClassUnderTest.Read(null, new TestOptions(), new TestContext(), null, true)) as ArgumentNullException; Assert.NotNull(model); }
public void Will_throw_argument_null_exception_if_context_is_null() { var reader = new TestableTestCaseStreamReader(); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, new StreamReader(new MemoryStream())); var model = Record.Exception(() => reader.ClassUnderTest.Read(processStream, new TestOptions(), null, null, true)) as ArgumentNullException; Assert.NotNull(model); }
public void Will_fire_file_started_event() { var reader = new TestableTestCaseStreamReader(); var json = JsonStreamEvents.FileStartEventJson + JsonStreamEvents.TestStartEventJson; var context = reader.BuildContext("file"); var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false); callback.Verify(x => x.FileStarted("file")); }
public void Will_fire_file_started_event() { var reader = new TestableTestCaseStreamReader(); var json = @"#_#FileStart#_# {""type"": ""FileStart"", ""timetaken"":88}"; var context = new TestContext { InputTestFile = "file" }; var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false); callback.Verify(x => x.FileStarted("file")); }
public void Will_supress_internal_log_event() { var reader = new TestableTestCaseStreamReader(); var json = JsonStreamEvents.FileStartEventJson + JsonStreamEvents.TestStartEventJson + string.Format(JsonStreamEvents.LogEventJsonTemplate, "!!_!! log"); var context = reader.BuildContext("file"); var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); TestLog result = null; callback.Setup(x => x.FileLog(It.IsAny <TestLog>())).Callback <TestLog>(t => result = t); reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false); Assert.Null(result); }
public void Will_put_coverage_object_in_summary() { var reader = new TestableTestCaseStreamReader(); var json = JsonStreamEvents.FileStartEventJson + JsonStreamEvents.TestStartEventJson + JsonStreamEvents.CoverageEventJson; var context = reader.BuildContext("file"); var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); reader.Mock <ICoverageEngine>().Setup(ce => ce.DeserializeCoverageObject(It.IsAny <string>(), context)). Returns(new CoverageData()); var summary = reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false)[0]; Assert.NotNull(summary.CoverageObject); }
public void Will_put_logs_in_summary() { var reader = new TestableTestCaseStreamReader(); var json = JsonStreamEvents.FileStartEventJson + JsonStreamEvents.TestStartEventJson + string.Format(JsonStreamEvents.LogEventJsonTemplate, "hi") + string.Format(JsonStreamEvents.LogEventJsonTemplate, "bye"); var context = reader.BuildContext("file"); var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); var summary = reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false)[0]; Assert.Equal(2, summary.Logs.Count); Assert.Equal("file", summary.Logs[0].InputTestFile); Assert.Equal("hi", summary.Logs[0].Message); Assert.Equal("bye", summary.Logs[1].Message); }
public void Will_fire_file_finished_event() { var reader = new TestableTestCaseStreamReader(); var json = JsonStreamEvents.FileStartEventJson + JsonStreamEvents.TestStartEventJson + JsonStreamEvents.TestDoneEventJson + JsonStreamEvents.FileDoneEventJson; var context = reader.BuildContext("file"); var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); TestFileSummary result = null; callback.Setup(x => x.FileFinished("file", It.IsAny <TestFileSummary>())).Callback <string, TestFileSummary>((f, t) => result = t);; reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false); Assert.NotNull(result); Assert.Equal(10, result.TimeTaken); }
public void Will_fire_log_event_if_file_is_not_already_known() { var reader = new TestableTestCaseStreamReader(); var json = JsonStreamEvents.FileStartEventJson + JsonStreamEvents.LogEventJson + JsonStreamEvents.TestStartEventJson; var context = reader.BuildContext("file"); var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); TestLog result = null; callback.Setup(x => x.FileLog(It.IsAny <TestLog>())).Callback <TestLog>(t => result = t); reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false); Assert.NotNull(result); Assert.Equal("log", result.Message); Assert.Equal("file", result.InputTestFile); }
public void Will_set_empty_coverage_object_when_coverage_is_enabled() { var reader = new TestableTestCaseStreamReader(); var json = @""; var context = reader.BuildContext("file"); var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); var summary = reader.ClassUnderTest.Read(processStream, new TestOptions { CoverageOptions = new CoverageOptions { Enabled = true } }, context, callback.Object, false)[0]; Assert.NotNull(summary.CoverageObject); }
public void Will_set_timed_out_after_test_file_timeout_and_kill_process() { var reader = new TestableTestCaseStreamReader(); var context = reader.BuildContext("file"); var stream = new WaitingStreamReader(new MemoryStream(Encoding.UTF8.GetBytes("")), 1000); var process = new Mock <IProcessWrapper>(); var processStream = new ProcessStream(process.Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); var summary = reader.ClassUnderTest.Read(processStream, new TestOptions { TestFileTimeoutMilliseconds = 200 }, context, callback.Object, false)[0]; Assert.NotNull(summary); Assert.True(processStream.TimedOut); process.Verify(x => x.Kill()); }
public void Will_supress_internal_log_event() { var reader = new TestableTestCaseStreamReader(); var json = @"#_#Log#_# {""type"":""Log"",""Log"":{""message"":""!!_!! hi""}}"; var context = new TestContext { InputTestFile = "file" }; var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); TestLog result = null; callback.Setup(x => x.FileLog(It.IsAny <TestLog>())).Callback <TestLog>(t => result = t); reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false); Assert.Null(result); }
public void Will_recover_after_malformed_json() { var reader = new TestableTestCaseStreamReader(); var json = @" #_#Log#_# ""type"":""Log"",""Log"":{""message"":""hi""}} " + string.Format(JsonStreamEvents.LogEventJsonTemplate, "bye") + JsonStreamEvents.FileStartEventJson + JsonStreamEvents.TestStartEventJson; var context = reader.BuildContext("file"); var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); var summary = reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false)[0]; Assert.Equal(1, summary.Logs.Count); Assert.Equal("file", summary.Logs[0].InputTestFile); Assert.Equal("bye", summary.Logs[0].Message); }
public void Will_put_error_in_summary() { var reader = new TestableTestCaseStreamReader(); var json = JsonStreamEvents.FileStartEventJson + JsonStreamEvents.TestStartEventJson + JsonStreamEvents.ErrorEventJson; var context = reader.BuildContext("file"); var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); var summary = reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false)[0]; Assert.Equal(1, summary.Errors.Count); Assert.Equal("file", summary.Errors[0].InputTestFile); Assert.Equal("error", summary.Errors[0].Message); Assert.Equal("errorFile", summary.Errors[0].Stack[0].File); Assert.Equal("errorFunc", summary.Errors[0].Stack[0].Function); Assert.Equal("22", summary.Errors[0].Stack[0].Line); }
public void Will_supress_errors_after_timeout_when_killing_process() { var reader = new TestableTestCaseStreamReader(); var context = reader.BuildContext("file"); var stream = new WaitingStreamReader(new MemoryStream(Encoding.UTF8.GetBytes("")), 1000); var process = new Mock <IProcessWrapper>(); var processStream = new ProcessStream(process.Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); process.Setup(x => x.Kill()).Throws(new InvalidOperationException()); var summary = reader.ClassUnderTest.Read(processStream, new TestOptions { TestFileTimeoutMilliseconds = 200 }, context, callback.Object, false)[0]; Assert.NotNull(summary); process.Verify(x => x.Kill()); }
public void Will_fire_file_finished_event() { var reader = new TestableTestCaseStreamReader(); var json = @"#_#FileDone#_# {""type"":""FileDone"",""timetaken"":10,""failed"":1,""passed"":2}"; var context = new TestContext { InputTestFile = "file" }; var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); TestFileSummary result = null; callback.Setup(x => x.FileFinished("file", It.IsAny <TestFileSummary>())).Callback <string, TestFileSummary>((f, t) => result = t);; reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false); Assert.NotNull(result); Assert.Equal(10, result.TimeTaken); }
public void Will_fire_test_finished_event() { var reader = new TestableTestCaseStreamReader(); var json = JsonStreamEvents.FileStartEventJson + JsonStreamEvents.TestStartEventJson + JsonStreamEvents.TestDoneEventJson; var context = reader.BuildContext("file"); var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStreamStringSource(new Mock <IProcessWrapper>().Object, stream, 1000); var callback = new Mock <ITestMethodRunnerCallback>(); TestCase result = null; callback.Setup(x => x.TestFinished(context, It.IsAny <TestCase>())).Callback <TestContext, TestCase>((c, t) => result = t); reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object); Assert.NotNull(result); Assert.Equal("module", result.ModuleName); Assert.Equal("test", result.TestName); Assert.Equal("file", result.InputTestFile); }
public void Will_put_coverage_object_in_summary() { var reader = new TestableTestCaseStreamReader(); var json = @"#_#CoverageObject#_# {""type"":""CoverageObject"",""Object"":""""}"; var context = new TestContext { InputTestFile = "file" }; var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); reader.Mock <ICoverageEngine>().Setup(ce => ce.DeserializeCoverageObject(It.IsAny <string>(), context)). Returns(new CoverageData()); var summary = reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false); Assert.NotNull(summary.CoverageObject); }
public void Will_fire_error_event() { var reader = new TestableTestCaseStreamReader(); var json = JsonStreamEvents.FileStartEventJson + JsonStreamEvents.TestStartEventJson + JsonStreamEvents.ErrorEventJson; var context = reader.BuildContext("file"); var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); TestError result = null; callback.Setup(x => x.FileError(It.IsAny <TestError>())).Callback <TestError>(t => result = t); reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false); Assert.NotNull(result); Assert.Equal("file", result.InputTestFile); Assert.Equal("error", result.Message); Assert.Equal("errorFile", result.Stack[0].File); Assert.Equal("errorFunc", result.Stack[0].Function); Assert.Equal("22", result.Stack[0].Line); }
public void Will_fire_test_finished_event() { var reader = new TestableTestCaseStreamReader(); var json = @"#_#TestDone#_# {""type"":""TestDone"",""testCase"":{""moduleName"":""module"",""testName"":""test"",""testResults"":[]}}"; var context = new TestContext { InputTestFile = "file" }; var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); TestCase result = null; callback.Setup(x => x.TestFinished(It.IsAny <TestCase>())).Callback <TestCase>(t => result = t); reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false); Assert.NotNull(result); Assert.Equal("module", result.ModuleName); Assert.Equal("test", result.TestName); Assert.Equal("file", result.InputTestFile); }
public void Will_use_timeout_from_context_if_available() { var reader = new TestableTestCaseStreamReader(); var context = reader.BuildContext("file"); context.TestFileSettings = new ChutzpahTestSettingsFile { TestFileTimeout = 200 }; var stream = new WaitingStreamReader(new MemoryStream(Encoding.UTF8.GetBytes("")), 10000); var process = new Mock <IProcessWrapper>(); var processStream = new ProcessStreamStringSource(process.Object, stream, 1000); var callback = new Mock <ITestMethodRunnerCallback>(); process.Setup(x => x.Kill()).Throws(new InvalidOperationException()); var summary = reader.ClassUnderTest.Read(processStream, new TestOptions { TestFileTimeoutMilliseconds = 2000 }, context, callback.Object).TestFileSummaries[0]; Assert.NotNull(summary); process.Verify(x => x.Kill()); }
public void Will_put_logs_in_summary() { var reader = new TestableTestCaseStreamReader(); var json = @" #_#Log#_# {""type"":""Log"",""Log"":{""message"":""hi""}} #_#Log#_# {""type"":""Log"",""Log"":{""message"":""bye""}} "; var context = new TestContext { InputTestFile = "file" }; var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); var summary = reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false); Assert.Equal(2, summary.Logs.Count); Assert.Equal("file", summary.Logs[0].InputTestFile); Assert.Equal("hi", summary.Logs[0].Message); Assert.Equal("bye", summary.Logs[1].Message); }
public void Will_fire_error_event() { var reader = new TestableTestCaseStreamReader(); var json = @"#_#Error#_# {""type"":""Error"",""Error"":{""message"":""uhoh"", ""stack"":[{""file"":""errorFile"",""function"":""errorFunc"",""line"":22}]}}"; var context = new TestContext { InputTestFile = "file" }; var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); TestError result = null; callback.Setup(x => x.FileError(It.IsAny <TestError>())).Callback <TestError>(t => result = t); reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false); Assert.NotNull(result); Assert.Equal("file", result.InputTestFile); Assert.Equal("uhoh", result.Message); Assert.Equal("errorFile", result.Stack[0].File); Assert.Equal("errorFunc", result.Stack[0].Function); Assert.Equal("22", result.Stack[0].Line); }
public void Will_put_error_in_summary() { var reader = new TestableTestCaseStreamReader(); var json = @" #_#Error#_# {""type"":""Error"",""Error"":{""message"":""uhoh"", ""stack"":[{""file"":""errorFile"",""function"":""errorFunc"",""line"":22}]}} "; var context = new TestContext { InputTestFile = "file" }; var stream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(json))); var processStream = new ProcessStream(new Mock <IProcessWrapper>().Object, stream); var callback = new Mock <ITestMethodRunnerCallback>(); var summary = reader.ClassUnderTest.Read(processStream, new TestOptions(), context, callback.Object, false); Assert.Equal(1, summary.Errors.Count); Assert.Equal("file", summary.Errors[0].InputTestFile); Assert.Equal("uhoh", summary.Errors[0].Message); Assert.Equal("errorFile", summary.Errors[0].Stack[0].File); Assert.Equal("errorFunc", summary.Errors[0].Stack[0].Function); Assert.Equal("22", summary.Errors[0].Stack[0].Line); }