Skip to content

Commit

Permalink
Issue2466 propagate stack trace to child result (#4467)
Browse files Browse the repository at this point in the history
* Allow executing the build script

* Allow running tests in VS with .NET8 installed

* Ensure StackTrace of OneTimeSetUp is passed to child test results
  • Loading branch information
manfred-brands committed Sep 14, 2023
1 parent 9b46601 commit c2eed24
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 9 deletions.
2 changes: 1 addition & 1 deletion build.cmd
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
@echo off
powershell ./build.ps1 %CAKE_ARGS% %*
powershell -ExecutionPolicy ByPass -NoProfile ./build.ps1 %CAKE_ARGS% %*
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ protected override void PerformWork()
case TestStatus.Skipped:
case TestStatus.Inconclusive:
case TestStatus.Failed:
SkipChildren(this, Result.ResultState.WithSite(FailureSite.Parent), "OneTimeSetUp: " + Result.Message);
SkipChildren(this, Result.ResultState.WithSite(FailureSite.Parent), "OneTimeSetUp: " + Result.Message, Result.StackTrace);
break;
}
}
Expand Down Expand Up @@ -313,28 +313,28 @@ private void RunChildren()
private void SkipFixture(ResultState resultState, string message, string stackTrace)
{
Result.SetResult(resultState.WithSite(FailureSite.SetUp), message, StackFilter.DefaultFilter.Filter(stackTrace));
SkipChildren(this, resultState.WithSite(FailureSite.Parent), "OneTimeSetUp: " + message);
SkipChildren(this, resultState.WithSite(FailureSite.Parent), "OneTimeSetUp: " + message, stackTrace);
}

private void SkipChildren(CompositeWorkItem workItem, ResultState resultState, string message)
private void SkipChildren(CompositeWorkItem workItem, ResultState resultState, string message, string stackTrace)
{
foreach (WorkItem child in workItem.Children)
{
SetChildWorkItemSkippedResult(child.Result, resultState, message);
SetChildWorkItemSkippedResult(child.Result, resultState, message, stackTrace);
_suiteResult.AddResult(child.Result);

// Some runners may depend on getting the TestFinished event
// even for tests that have been skipped at a higher level.
Context.Listener.TestFinished(child.Result);

if (child is CompositeWorkItem)
SkipChildren((CompositeWorkItem)child, resultState, message);
SkipChildren((CompositeWorkItem)child, resultState, message, stackTrace);
}
}

private void SetChildWorkItemSkippedResult(TestResult result, ResultState resultState, string message)
private void SetChildWorkItemSkippedResult(TestResult result, ResultState resultState, string message, string stackTrace)
{
result.SetResult(resultState, message);
result.SetResult(resultState, message, stackTrace);
result.StartTime = Context.StartTime;
result.EndTime = DateTime.UtcNow;
result.Duration = Context.Duration;
Expand Down
22 changes: 22 additions & 0 deletions src/NUnitFramework/tests/Attributes/OneTimeSetUpTearDownTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,28 @@ public void FailedBaseSetUpCausesDerivedSetUpAndTeardownToBeSkipped()
Assert.AreEqual(0, fixture.DerivedTearDownCount);
}

[Test]
public void FailedSetUpStacktracePropogatesToTestResult()
{
SetUpAndTearDownFixture fixture = new SetUpAndTearDownFixture();
fixture.ThrowInBaseSetUp = true;
ITestResult result = TestBuilder.RunTestFixture(fixture);

Assert.That(result.ResultState.Site, Is.EqualTo(FailureSite.SetUp));
Assert.That(result.StackTrace, Is.Not.Null);
Assert.That(result.StackTrace, Does.Contain($"{nameof(SetUpAndTearDownFixture)}.{nameof(SetUpAndTearDownFixture.Init)}"));

Assert.That(result.HasChildren, Is.True);
foreach (var childResult in result.Children)
{
Assert.That(childResult.ResultState.Site, Is.EqualTo(FailureSite.Parent));
Assert.That(childResult.StackTrace, Is.EqualTo(result.StackTrace));
}

Assert.AreEqual(1, fixture.SetUpCount);
Assert.AreEqual(1, fixture.TearDownCount);
}

[Test]
public void StaticBaseSetUpCalledFirstAndTearDownCalledLast()
{
Expand Down
2 changes: 1 addition & 1 deletion src/NUnitFramework/tests/nunit.framework.tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

<ItemGroup Condition="'$(TargetFramework)' != 'net35' and '$(TargetFramework)' != 'net40'">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.3.1" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
<PackageReference Include="System.Collections.Immutable" Version="1.5.0" />
</ItemGroup>

Expand Down

0 comments on commit c2eed24

Please sign in to comment.