Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions TUnit.Engine.Tests/TransitiveDependenciesTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using Shouldly;
using TUnit.Engine.Tests.Enums;

namespace TUnit.Engine.Tests;

/// <summary>
/// Verifies that tests are correctly skipped when transitive dependencies fail.
/// Tests the fix for GitHub issue #4643.
/// </summary>
public class TransitiveDependenciesTests(TestMode testMode) : InvokableTestBase(testMode)
{
[Test]
public async Task Test()
{
await RunTestsWithFilter(
"/*/*/TransitiveDependenciesTests/*",
[
result => result.ResultSummary.Outcome.ShouldBe("Failed"),
result => result.ResultSummary.Counters.Total.ShouldBe(3),
result => result.ResultSummary.Counters.Passed.ShouldBe(0),
result => result.ResultSummary.Counters.Failed.ShouldBe(1), // Only Test1 should fail
result => result.ResultSummary.Counters.NotExecuted.ShouldBe(2) // Test2 and Test3 should be skipped
]);
}
}
2 changes: 1 addition & 1 deletion TUnit.Engine/Scheduling/TestRunner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ private async ValueTask ExecuteTestInternalAsync(AbstractExecutableTest test, Ca
{
await ExecuteTestAsync(dependency.Test, cancellationToken).ConfigureAwait(false);

if (dependency.Test.State == TestState.Failed && !dependency.ProceedOnFailure)
if (dependency.Test.State != TestState.Passed && !dependency.ProceedOnFailure)
{
_testStateManager.MarkSkipped(test, "Skipped due to failed dependencies");
await _tunitMessageBus.Skipped(test.Context, "Skipped due to failed dependencies").ConfigureAwait(false);
Expand Down
35 changes: 35 additions & 0 deletions TUnit.TestProject/TransitiveDependenciesTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using TUnit.TestProject.Attributes;

namespace TUnit.TestProject;

/// <summary>
/// Tests for transitive dependency handling when dependencies fail.
/// Reproduces GitHub issue #4643: Tests not skipped when transitive dependencies fail
/// </summary>
[EngineTest(ExpectedResult.Failure)]
public class TransitiveDependenciesTests
{
[Test]
public async Task Test1()
{
// This test fails intentionally
await Assert.That(true).IsEqualTo(false);
}

[Test, DependsOn(nameof(Test1))]
public async Task Test2()
{
// Test2 depends on Test1, which fails
// Test2 should be skipped
await Assert.That(true).IsEqualTo(false);
}

[Test, DependsOn(nameof(Test2))]
public async Task Test3()
{
// Test3 depends on Test2, which depends on Test1
// When Test1 fails, Test2 is skipped
// Therefore Test3 should also be skipped (transitive dependency)
await Assert.That(true).IsEqualTo(false);
}
}
Loading