Skip to content

Commit 7051f5f

Browse files
authored
Fix multiple data-driven tests not all being picked up in a [DependsOn] (#2436)
* Fix multiple data-driven tests not all being picked up in a [DependsOn] * Engine test
1 parent f363e36 commit 7051f5f

File tree

7 files changed

+73
-1
lines changed

7 files changed

+73
-1
lines changed

TUnit.Core/TestContext.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Diagnostics;
2+
using System.Diagnostics.CodeAnalysis;
23

34
namespace TUnit.Core;
45

@@ -72,6 +73,9 @@ internal TestContext(IServiceProvider serviceProvider, TestDetails testDetails,
7273
/// </summary>
7374
public TestDetails TestDetails { get; }
7475

76+
[field: AllowNull, MaybeNull]
77+
public TestContext[] Dependencies => field ??= InternalDiscoveredTest.Dependencies.Select(x => x.Test.TestContext).ToArray();
78+
7579
/// <summary>
7680
/// Gets or sets the current retry attempt for the test.
7781
/// </summary>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using Shouldly;
2+
using TUnit.Engine.Tests.Enums;
3+
4+
namespace TUnit.Engine.Tests;
5+
6+
public class DependencyCountTests(TestMode testMode) : InvokableTestBase(testMode)
7+
{
8+
public async Task Test()
9+
{
10+
await RunTestsWithFilter(
11+
"/*/*/DependencyCountTests/*",
12+
[
13+
result => result.ResultSummary.Outcome.ShouldBe("Completed"),
14+
result => result.ResultSummary.Counters.Total.ShouldBe(8),
15+
result => result.ResultSummary.Counters.Passed.ShouldBe(8),
16+
result => result.ResultSummary.Counters.Failed.ShouldBe(0),
17+
result => result.ResultSummary.Counters.NotExecuted.ShouldBe(0),
18+
]);
19+
}
20+
}

TUnit.Engine/Services/DependencyCollector.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,9 @@ public bool Equals(TestDetails? x, TestDetails? y)
122122
return false;
123123
}
124124

125-
return x.IsSameTest(y);
125+
return x.IsSameTest(y) &&
126+
x.TestMethodParameterTypes.SequenceEqual(y.TestMethodParameterTypes) &&
127+
x.TestMethodArguments.SequenceEqual(y.TestMethodArguments);
126128
}
127129

128130
public int GetHashCode(TestDetails obj)

TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet2_0.verified.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -790,6 +790,7 @@ namespace TUnit.Core
790790
public System.Collections.Generic.List<TUnit.Core.ArgumentDisplayFormatter> ArgumentDisplayFormatters { get; }
791791
public System.Threading.CancellationToken CancellationToken { get; }
792792
public int CurrentRetryAttempt { get; }
793+
public TUnit.Core.TestContext[] Dependencies { get; }
793794
public TUnit.Core.TestContextEvents Events { get; }
794795
public bool IsRegistered { get; }
795796
public System.Collections.Generic.Dictionary<string, object?> ObjectBag { get; }

TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet8_0.verified.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -836,6 +836,7 @@ namespace TUnit.Core
836836
public System.Collections.Generic.List<TUnit.Core.ArgumentDisplayFormatter> ArgumentDisplayFormatters { get; }
837837
public System.Threading.CancellationToken CancellationToken { get; }
838838
public int CurrentRetryAttempt { get; }
839+
public TUnit.Core.TestContext[] Dependencies { get; }
839840
public TUnit.Core.TestContextEvents Events { get; }
840841
public bool IsRegistered { get; }
841842
public System.Collections.Generic.Dictionary<string, object?> ObjectBag { get; }

TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet9_0.verified.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -836,6 +836,7 @@ namespace TUnit.Core
836836
public System.Collections.Generic.List<TUnit.Core.ArgumentDisplayFormatter> ArgumentDisplayFormatters { get; }
837837
public System.Threading.CancellationToken CancellationToken { get; }
838838
public int CurrentRetryAttempt { get; }
839+
public TUnit.Core.TestContext[] Dependencies { get; }
839840
public TUnit.Core.TestContextEvents Events { get; }
840841
public bool IsRegistered { get; }
841842
public System.Collections.Generic.Dictionary<string, object?> ObjectBag { get; }
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
namespace TUnit.TestProject;
2+
3+
public class DependencyCountTests
4+
{
5+
[Test]
6+
[Arguments(1)]
7+
[Arguments(2)]
8+
[Arguments(3)]
9+
public Task Test1(int value)
10+
{
11+
return Task.CompletedTask;
12+
}
13+
14+
[Test, DependsOn(nameof(Test1))]
15+
public async Task Test2()
16+
{
17+
await Assert.That(TestContext.Current!.Dependencies).HasCount().EqualTo(3);
18+
}
19+
20+
[Test]
21+
public Task Test3()
22+
{
23+
return Task.CompletedTask;
24+
}
25+
26+
[Test, DependsOn(nameof(Test3))]
27+
public async Task Test4()
28+
{
29+
await Assert.That(TestContext.Current!.Dependencies).HasCount().EqualTo(1);
30+
}
31+
32+
[Test, DependsOn(nameof(Test1))]
33+
public Task Test5()
34+
{
35+
return Task.CompletedTask;
36+
}
37+
38+
[Test, DependsOn(nameof(Test5))]
39+
public async Task Test6()
40+
{
41+
await Assert.That(TestContext.Current!.Dependencies).HasCount().EqualTo(4);
42+
}
43+
}

0 commit comments

Comments
 (0)