Skip to content

Commit fac4d85

Browse files
committed
Skip tests during discovery that have duplicate unique IDs, since they won't show up during execution any more
1 parent 2a4863b commit fac4d85

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

src/xunit.runner.visualstudio/Sinks/VsDiscoverySink.cs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ internal sealed class VsDiscoverySink : IVsDiscoverySink, IDisposable
2727
readonly ITestFrameworkDiscoveryOptions discoveryOptions;
2828
readonly VsTestCaseDiscoverySink discoverySink;
2929
readonly DiscoveryEventSink discoveryEventSink = new();
30+
readonly Dictionary<string, string> displayNamesByTestCaseUniqueID = [];
3031
readonly LoggerHelper logger;
3132
readonly string source;
3233
readonly List<ITestCaseDiscovered> testCaseBatch = [];
@@ -149,7 +150,6 @@ void HandleCancellation(MessageHandlerArgs args)
149150
void HandleTestCaseDiscoveredMessage(MessageHandlerArgs<ITestCaseDiscovered> args)
150151
{
151152
testCaseBatch.Add(args.Message);
152-
TotalTests++;
153153

154154
if (testCaseBatch.Count == TestCaseBatchSize)
155155
SendExistingTestCases();
@@ -176,20 +176,28 @@ void HandleDiscoveryCompleteMessage(MessageHandlerArgs<IDiscoveryComplete> args)
176176
bool IMessageSink.OnMessage(IMessageSinkMessage message) =>
177177
discoveryEventSink.OnMessage(message);
178178

179-
private void SendExistingTestCases()
179+
void SendExistingTestCases()
180180
{
181181
if (testCaseBatch.Count == 0)
182182
return;
183183

184184
foreach (var testCase in testCaseBatch)
185185
{
186-
var vsTestCase = CreateVsTestCase(source, testCase, logger, testPlatformContext);
187-
if (vsTestCase is not null && testCaseFilter.MatchTestCase(vsTestCase))
186+
if (displayNamesByTestCaseUniqueID.TryGetValue(testCase.TestCaseUniqueID, out var otherTestCase))
187+
logger.LogWithSource(source, "Skipping test case with duplicate ID '{0}' ('{1}' and '{2}')", testCase.TestCaseUniqueID, otherTestCase, testCase.TestCaseDisplayName);
188+
else
188189
{
189-
if (discoveryOptions.GetInternalDiagnosticMessagesOrDefault())
190-
logger.LogWithSource(source, "Discovered test case '{0}' (ID = '{1}', VS FQN = '{2}')", testCase.TestCaseDisplayName, testCase.TestCaseUniqueID, vsTestCase.FullyQualifiedName);
190+
var vsTestCase = CreateVsTestCase(source, testCase, logger, testPlatformContext);
191+
if (vsTestCase is not null && testCaseFilter.MatchTestCase(vsTestCase))
192+
{
193+
displayNamesByTestCaseUniqueID[testCase.TestCaseUniqueID] = testCase.TestCaseDisplayName;
194+
TotalTests++;
191195

192-
discoverySink.SendTestCase(vsTestCase);
196+
if (discoveryOptions.GetInternalDiagnosticMessagesOrDefault())
197+
logger.LogWithSource(source, "Discovered test case '{0}' (ID = '{1}', VS FQN = '{2}')", testCase.TestCaseDisplayName, testCase.TestCaseUniqueID, vsTestCase.FullyQualifiedName);
198+
199+
discoverySink.SendTestCase(vsTestCase);
200+
}
193201
}
194202
}
195203

0 commit comments

Comments
 (0)