Skip to content

Commit cc3fae0

Browse files
authored
A bit of TestContextImplementation cleanup (#6723)
1 parent 57c5191 commit cc3fae0

File tree

8 files changed

+128
-152
lines changed

8 files changed

+128
-152
lines changed

src/Adapter/MSTestAdapter.PlatformServices/Services/TestContextImplementation.cs

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -98,20 +98,7 @@ public override string ToString()
9898
/// <param name="properties">Properties/configuration passed in.</param>
9999
/// <param name="messageLogger">The message logger to use.</param>
100100
/// <param name="testRunCancellationToken">The global test run cancellation token.</param>
101-
internal TestContextImplementation(ITestMethod? testMethod, string? testClassFullName, IDictionary<string, object?> properties, IMessageLogger messageLogger, TestRunCancellationToken? testRunCancellationToken)
102-
: this(testMethod, testClassFullName, properties)
103-
{
104-
_messageLogger = messageLogger;
105-
_cancellationTokenRegistration = testRunCancellationToken?.Register(CancelDelegate, this);
106-
}
107-
108-
/// <summary>
109-
/// Initializes a new instance of the <see cref="TestContextImplementation"/> class.
110-
/// </summary>
111-
/// <param name="testMethod">The test method.</param>
112-
/// <param name="testClassFullName">The test class full name.</param>
113-
/// <param name="properties">Properties/configuration passed in.</param>
114-
internal TestContextImplementation(ITestMethod? testMethod, string? testClassFullName, IDictionary<string, object?> properties)
101+
internal TestContextImplementation(ITestMethod? testMethod, string? testClassFullName, IDictionary<string, object?> properties, IMessageLogger? messageLogger, TestRunCancellationToken? testRunCancellationToken)
115102
{
116103
// testMethod can be null when running ForceCleanup (done when reaching --maximum-failed-tests.
117104
DebugEx.Assert(properties != null, "properties is not null");
@@ -139,6 +126,9 @@ internal TestContextImplementation(ITestMethod? testMethod, string? testClassFul
139126
_properties.Add(TestNameLabel, testMethod.Name);
140127
}
141128
}
129+
130+
_messageLogger = messageLogger;
131+
_cancellationTokenRegistration = testRunCancellationToken?.Register(CancelDelegate, this);
142132
}
143133

144134
internal static TestContextImplementation? CurrentTestContext => CurrentTestContextAsyncLocal.Value;

test/UnitTests/MSTestAdapter.PlatformServices.UnitTests/Execution/TestAssemblyInfoTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ public void RunAssemblyCleanupShouldThrowTheInnerMostExceptionWhenThereAreMultip
310310
}
311311

312312
private static TestContextImplementation GetTestContext()
313-
=> new(null, null, new Dictionary<string, object?>());
313+
=> new(null, null, new Dictionary<string, object?>(), null, null);
314314

315315
#endregion
316316

test/UnitTests/MSTestAdapter.PlatformServices.UnitTests/Execution/TestClassInfoTests.cs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,9 @@ void Action()
125125
VerifyThrows<TypeInspectionException>(Action);
126126
}
127127

128+
private static TestContextImplementation CreateDummyTestContextImplementation()
129+
=> new(null, null, new Dictionary<string, object?>(), null, null);
130+
128131
public async Task TestClassInfoClassCleanupMethodShouldNotInvokeWhenNoTestClassInitializedIsCalled()
129132
{
130133
int classCleanupCallCount = 0;
@@ -133,7 +136,7 @@ public async Task TestClassInfoClassCleanupMethodShouldNotInvokeWhenNoTestClassI
133136
_testClassInfo.ClassCleanupMethod = typeof(DummyTestClass).GetMethod("ClassCleanupMethod")!;
134137
_testClassInfo.ClassInitializeMethod = typeof(DummyTestClass).GetMethod("ClassInitializeMethod")!;
135138

136-
TestFailedException? ex = await _testClassInfo.ExecuteClassCleanupAsync(new TestContextImplementation(null, null, new Dictionary<string, object?>())); // call cleanup without calling init
139+
TestFailedException? ex = await _testClassInfo.ExecuteClassCleanupAsync(CreateDummyTestContextImplementation()); // call cleanup without calling init
137140
Verify(ex is null);
138141
Verify(classCleanupCallCount == 0);
139142
}
@@ -147,7 +150,7 @@ public async Task TestClassInfoClassCleanupMethodShouldInvokeWhenTestClassInitia
147150
_testClassInfo.ClassInitializeMethod = typeof(DummyTestClass).GetMethod("ClassInitializeMethod")!;
148151

149152
GetResultOrRunClassInitialize();
150-
TestFailedException? ex = await _testClassInfo.ExecuteClassCleanupAsync(new TestContextImplementation(null, null, new Dictionary<string, object?>())); // call cleanup without calling init
153+
TestFailedException? ex = await _testClassInfo.ExecuteClassCleanupAsync(CreateDummyTestContextImplementation()); // call cleanup without calling init
151154

152155
Verify(ex is null);
153156
Verify(classCleanupCallCount == 1);
@@ -162,7 +165,7 @@ public async Task TestClassInfoClassCleanupMethodShouldInvokeBaseClassCleanupMet
162165
_testClassInfo.BaseClassCleanupMethods.Add(typeof(DummyBaseTestClass).GetMethod("CleanupClassMethod")!);
163166

164167
GetResultOrRunClassInitialize();
165-
TestFailedException? ex = await _testClassInfo.ExecuteClassCleanupAsync(new TestContextImplementation(null, null, new Dictionary<string, object?>()));
168+
TestFailedException? ex = await _testClassInfo.ExecuteClassCleanupAsync(CreateDummyTestContextImplementation());
166169

167170
Verify(ex is null);
168171
Verify(classCleanupCallCount == 1);
@@ -466,7 +469,7 @@ public async Task RunClassCleanupShouldInvokeIfClassCleanupMethod()
466469

467470
// Act
468471
GetResultOrRunClassInitialize(null);
469-
TestFailedException? ex = await _testClassInfo.ExecuteClassCleanupAsync(new TestContextImplementation(null, null, new Dictionary<string, object?>()));
472+
TestFailedException? ex = await _testClassInfo.ExecuteClassCleanupAsync(CreateDummyTestContextImplementation());
470473

471474
// Assert
472475
Verify(ex is null);
@@ -481,7 +484,7 @@ public async Task RunClassCleanupShouldNotInvokeIfClassCleanupIsNull()
481484
_testClassInfo.ClassCleanupMethod = null;
482485

483486
// Act
484-
TestFailedException? ex = await _testClassInfo.ExecuteClassCleanupAsync(new TestContextImplementation(null, null, new Dictionary<string, object?>()));
487+
TestFailedException? ex = await _testClassInfo.ExecuteClassCleanupAsync(CreateDummyTestContextImplementation());
485488

486489
// Assert
487490
Verify(ex is null);
@@ -496,7 +499,7 @@ public async Task RunClassCleanupShouldReturnAssertFailureExceptionDetails()
496499

497500
// Act
498501
GetResultOrRunClassInitialize(null);
499-
TestFailedException? classCleanupException = await _testClassInfo.ExecuteClassCleanupAsync(new TestContextImplementation(null, null, new Dictionary<string, object?>()));
502+
TestFailedException? classCleanupException = await _testClassInfo.ExecuteClassCleanupAsync(CreateDummyTestContextImplementation());
500503

501504
// Assert
502505
Verify(classCleanupException is not null);
@@ -518,7 +521,7 @@ public async Task RunClassCleanupShouldReturnAssertInconclusiveExceptionDetails(
518521

519522
// Act
520523
GetResultOrRunClassInitialize(null);
521-
TestFailedException? classCleanupException = await _testClassInfo.ExecuteClassCleanupAsync(new TestContextImplementation(null, null, new Dictionary<string, object?>()));
524+
TestFailedException? classCleanupException = await _testClassInfo.ExecuteClassCleanupAsync(CreateDummyTestContextImplementation());
522525

523526
// Assert
524527
Verify(classCleanupException is not null);
@@ -539,7 +542,7 @@ public async Task RunClassCleanupShouldReturnExceptionDetailsOfNonAssertExceptio
539542

540543
// Act
541544
GetResultOrRunClassInitialize(null);
542-
TestFailedException? classCleanupException = await _testClassInfo.ExecuteClassCleanupAsync(new TestContextImplementation(null, null, new Dictionary<string, object?>()));
545+
TestFailedException? classCleanupException = await _testClassInfo.ExecuteClassCleanupAsync(CreateDummyTestContextImplementation());
543546

544547
// Assert
545548
Verify(classCleanupException is not null);
@@ -558,7 +561,7 @@ public async Task RunBaseClassCleanupWithNoDerivedClassCleanupShouldReturnExcept
558561

559562
// Act
560563
GetResultOrRunClassInitialize(null);
561-
TestFailedException? classCleanupException = await _testClassInfo.ExecuteClassCleanupAsync(new TestContextImplementation(null, null, new Dictionary<string, object?>()));
564+
TestFailedException? classCleanupException = await _testClassInfo.ExecuteClassCleanupAsync(CreateDummyTestContextImplementation());
562565

563566
// Assert
564567
Verify(classCleanupException is not null);
@@ -577,7 +580,7 @@ public async Task RunBaseClassCleanupEvenIfThereIsNoDerivedClassCleanup()
577580
_testClassInfo.BaseClassCleanupMethods.Add(baseClassCleanupMethod);
578581

579582
// Act
580-
TestFailedException? ex = await _testClassInfo.ExecuteClassCleanupAsync(new TestContextImplementation(null, null, new Dictionary<string, object?>()));
583+
TestFailedException? ex = await _testClassInfo.ExecuteClassCleanupAsync(CreateDummyTestContextImplementation());
581584

582585
// Assert
583586
Verify(ex is null);
@@ -586,7 +589,7 @@ public async Task RunBaseClassCleanupEvenIfThereIsNoDerivedClassCleanup()
586589

587590
// Act 2
588591
GetResultOrRunClassInitialize(null);
589-
ex = await _testClassInfo.ExecuteClassCleanupAsync(new TestContextImplementation(null, null, new Dictionary<string, object?>()));
592+
ex = await _testClassInfo.ExecuteClassCleanupAsync(CreateDummyTestContextImplementation());
590593

591594
// Assert 2
592595
Verify(ex is null);
@@ -595,7 +598,7 @@ public async Task RunBaseClassCleanupEvenIfThereIsNoDerivedClassCleanup()
595598
Verify(classCleanupCallCount == 1, "DummyBaseTestClass.CleanupClassMethod call count");
596599

597600
// Act 3
598-
ex = await _testClassInfo.ExecuteClassCleanupAsync(new TestContextImplementation(null, null, new Dictionary<string, object?>()));
601+
ex = await _testClassInfo.ExecuteClassCleanupAsync(CreateDummyTestContextImplementation());
599602

600603
// Assert 3
601604
Verify(ex is null);
@@ -612,7 +615,7 @@ public async Task RunClassCleanupShouldThrowTheInnerMostExceptionWhenThereAreMul
612615
_testClassInfo.ClassCleanupMethod = typeof(DummyTestClass).GetMethod("ClassCleanupMethod")!;
613616

614617
GetResultOrRunClassInitialize(null);
615-
TestFailedException? classCleanupException = await _testClassInfo.ExecuteClassCleanupAsync(new TestContextImplementation(null, null, new Dictionary<string, object?>()));
618+
TestFailedException? classCleanupException = await _testClassInfo.ExecuteClassCleanupAsync(CreateDummyTestContextImplementation());
616619

617620
Verify(classCleanupException is not null);
618621
Verify(classCleanupException.Message.StartsWith("Class Cleanup method DummyTestClass.ClassCleanupMethod failed. Error Message: System.InvalidOperationException: I fail..", StringComparison.Ordinal));

test/UnitTests/MSTestAdapter.PlatformServices.UnitTests/Execution/TestMethodInfoTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public TestMethodInfoTests()
4747

4848
_testAssemblyInfo = new TestAssemblyInfo(typeof(DummyTestClass).Assembly);
4949
var testMethod = new TestMethod("dummyTestName", "dummyClassName", "dummyAssemblyName", false);
50-
_testContextImplementation = new TestContextImplementation(testMethod, null, new Dictionary<string, object?>());
50+
_testContextImplementation = new TestContextImplementation(testMethod, null, new Dictionary<string, object?>(), null, null);
5151
_testClassInfo = new TestClassInfo(typeof(DummyTestClass), _constructorInfo, true, _classAttribute, _testAssemblyInfo);
5252

5353
_testMethodInfo = new TestMethodInfo(

test/UnitTests/MSTestAdapter.PlatformServices.UnitTests/Execution/TestMethodRunnerTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public TestMethodRunnerTests()
4040
_testMethodAttribute = new TestMethodAttribute();
4141

4242
_testMethod = new TestMethod("dummyTestName", "dummyClassName", "dummyAssemblyName", false);
43-
_testContextImplementation = new TestContextImplementation(_testMethod, null, new Dictionary<string, object?>());
43+
_testContextImplementation = new TestContextImplementation(_testMethod, null, new Dictionary<string, object?>(), null, null);
4444
_testClassInfo = GetTestClassInfo<DummyTestClass>();
4545

4646
_testMethodOptions = new TestMethodOptions(TimeoutInfo.FromTimeout(200), _testContextImplementation, _testMethodAttribute);

test/UnitTests/MSTestAdapter.PlatformServices.UnitTests/Execution/TestPropertyAttributeTests.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,15 @@ protected override void Dispose(bool disposing)
4040

4141
#region GetTestMethodInfo tests
4242

43+
private static TestContextImplementation CreateTestContextImplementationForMethod(TestMethod testMethod)
44+
=> new(testMethod, null, new Dictionary<string, object?>(), null, null);
45+
4346
public void GetTestMethodInfoShouldAddPropertiesFromContainingClassCorrectly()
4447
{
4548
string className = typeof(DummyTestClassBase).FullName!;
4649
var testMethod = new TestMethod(nameof(DummyTestClassBase.VirtualTestMethodInBaseAndDerived), className, typeof(DummyTestClassBase).Assembly.GetName().Name!, isAsync: false);
4750

48-
var testContext = new TestContextImplementation(testMethod, null, new Dictionary<string, object?>());
51+
TestContextImplementation testContext = CreateTestContextImplementationForMethod(testMethod);
4952

5053
_ = _typeCache.GetTestMethodInfo(
5154
testMethod,
@@ -75,7 +78,7 @@ public void GetTestMethodInfoShouldAddPropertiesFromContainingClassAndBaseClasse
7578
string className = typeof(DummyTestClassDerived).FullName!;
7679
var testMethod = new TestMethod(nameof(DummyTestClassDerived.VirtualTestMethodInBaseAndDerived), className, typeof(DummyTestClassBase).Assembly.GetName().Name!, isAsync: false);
7780

78-
var testContext = new TestContextImplementation(testMethod, null, new Dictionary<string, object?>());
81+
TestContextImplementation testContext = CreateTestContextImplementationForMethod(testMethod);
7982

8083
_ = _typeCache.GetTestMethodInfo(
8184
testMethod,
@@ -120,7 +123,7 @@ public void GetTestMethodInfoShouldAddPropertiesFromContainingClassAndBaseClasse
120123
string className = typeof(DummyTestClassDerived).FullName!;
121124
var testMethod = new TestMethod(nameof(DummyTestClassDerived.VirtualTestMethodInDerivedButNotTestMethodInBase), className, typeof(DummyTestClassBase).Assembly.GetName().Name!, isAsync: false);
122125

123-
var testContext = new TestContextImplementation(testMethod, null, new Dictionary<string, object?>());
126+
TestContextImplementation testContext = CreateTestContextImplementationForMethod(testMethod);
124127

125128
_ = _typeCache.GetTestMethodInfo(
126129
testMethod,

0 commit comments

Comments
 (0)