Skip to content

Commit 498c904

Browse files
CopilotYunchuWang
andcommitted
Extract reflection helper methods to reduce code duplication in tests
Co-authored-by: YunchuWang <[email protected]>
1 parent dadaee9 commit 498c904

File tree

1 file changed

+20
-37
lines changed

1 file changed

+20
-37
lines changed

test/Worker/Grpc.Tests/LoggingCategoryTests.cs

Lines changed: 20 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -167,33 +167,9 @@ public void DualCategoryLogger_BeginScope_CreatesScopeInBothLoggers()
167167
[Fact]
168168
public void GrpcDurableTaskWorker_UsesDualCategoryLogger_WhenLegacyCategoriesEnabled()
169169
{
170-
// Arrange
171-
var logProvider = new TestLogProvider(new NullOutput());
172-
var loggerFactory = new SimpleLoggerFactory(logProvider);
173-
174-
var workerOptions = new DurableTaskWorkerOptions
175-
{
176-
Logging = { UseLegacyCategories = true }
177-
};
178-
179-
var grpcOptions = new GrpcDurableTaskWorkerOptions();
180-
var factoryMock = new Mock<IDurableTaskFactory>(MockBehavior.Strict);
181-
var services = new ServiceCollection().BuildServiceProvider();
182-
183-
// Act - Create worker which will create the logger internally
184-
var worker = new GrpcDurableTaskWorker(
185-
name: "Test",
186-
factory: factoryMock.Object,
187-
grpcOptions: new OptionsMonitorStub<GrpcDurableTaskWorkerOptions>(grpcOptions),
188-
workerOptions: new OptionsMonitorStub<DurableTaskWorkerOptions>(workerOptions),
189-
services: services,
190-
loggerFactory: loggerFactory,
191-
orchestrationFilter: null,
192-
exceptionPropertiesProvider: null);
193-
194-
// Use reflection to access the private logger field
195-
var loggerField = typeof(GrpcDurableTaskWorker).GetField("logger", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
196-
var logger = loggerField?.GetValue(worker);
170+
// Arrange & Act
171+
var worker = CreateWorkerWithLoggingOptions(useLegacyCategories: true);
172+
var logger = GetWorkerLogger(worker);
197173

198174
// Assert - verify the worker uses DualCategoryLogger when legacy categories are enabled
199175
logger.Should().NotBeNull("worker should have a logger");
@@ -203,21 +179,30 @@ public void GrpcDurableTaskWorker_UsesDualCategoryLogger_WhenLegacyCategoriesEna
203179
[Fact]
204180
public void GrpcDurableTaskWorker_UsesRegularLogger_WhenLegacyCategoriesDisabled()
205181
{
206-
// Arrange
182+
// Arrange & Act
183+
var worker = CreateWorkerWithLoggingOptions(useLegacyCategories: false);
184+
var logger = GetWorkerLogger(worker);
185+
186+
// Assert - verify the worker uses a regular logger (not DualCategoryLogger) when legacy categories are disabled
187+
logger.Should().NotBeNull("worker should have a logger");
188+
logger.Should().NotBeOfType<DualCategoryLogger>("worker should not use DualCategoryLogger when UseLegacyCategories is false");
189+
}
190+
191+
static GrpcDurableTaskWorker CreateWorkerWithLoggingOptions(bool useLegacyCategories)
192+
{
207193
var logProvider = new TestLogProvider(new NullOutput());
208194
var loggerFactory = new SimpleLoggerFactory(logProvider);
209195

210196
var workerOptions = new DurableTaskWorkerOptions
211197
{
212-
Logging = { UseLegacyCategories = false }
198+
Logging = { UseLegacyCategories = useLegacyCategories }
213199
};
214200

215201
var grpcOptions = new GrpcDurableTaskWorkerOptions();
216202
var factoryMock = new Mock<IDurableTaskFactory>(MockBehavior.Strict);
217203
var services = new ServiceCollection().BuildServiceProvider();
218204

219-
// Act - Create worker which will create the logger internally
220-
var worker = new GrpcDurableTaskWorker(
205+
return new GrpcDurableTaskWorker(
221206
name: "Test",
222207
factory: factoryMock.Object,
223208
grpcOptions: new OptionsMonitorStub<GrpcDurableTaskWorkerOptions>(grpcOptions),
@@ -226,14 +211,12 @@ public void GrpcDurableTaskWorker_UsesRegularLogger_WhenLegacyCategoriesDisabled
226211
loggerFactory: loggerFactory,
227212
orchestrationFilter: null,
228213
exceptionPropertiesProvider: null);
214+
}
229215

230-
// Use reflection to access the private logger field
216+
static object? GetWorkerLogger(GrpcDurableTaskWorker worker)
217+
{
231218
var loggerField = typeof(GrpcDurableTaskWorker).GetField("logger", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
232-
var logger = loggerField?.GetValue(worker);
233-
234-
// Assert - verify the worker uses a regular logger (not DualCategoryLogger) when legacy categories are disabled
235-
logger.Should().NotBeNull("worker should have a logger");
236-
logger.Should().NotBeOfType<DualCategoryLogger>("worker should not use DualCategoryLogger when UseLegacyCategories is false");
219+
return loggerField?.GetValue(worker);
237220
}
238221

239222
}

0 commit comments

Comments
 (0)