Skip to content

Commit 06fd0cf

Browse files
committed
fix: improve error handling in test registration by catching exceptions during event receiver invocation
1 parent 3a1dc5b commit 06fd0cf

File tree

2 files changed

+11
-17
lines changed

2 files changed

+11
-17
lines changed

TUnit.Engine/Building/TestBuilder.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -698,7 +698,16 @@ public async Task<AbstractExecutableTest> BuildTestAsync(TestMetadata metadata,
698698

699699
// Invoke test registered event receivers BEFORE discovery event receivers
700700
// This is critical for allowing attributes to set custom hook executors
701-
await InvokeTestRegisteredEventReceiversAsync(context);
701+
try
702+
{
703+
await InvokeTestRegisteredEventReceiversAsync(context);
704+
}
705+
catch (Exception ex)
706+
{
707+
// Property registration or other registration logic failed
708+
// Mark the test as failed immediately, as the old code did
709+
test.SetResult(TestState.Failed, ex);
710+
}
702711

703712
await InvokeDiscoveryEventReceiversAsync(context);
704713

TUnit.Engine/Services/TestArgumentRegistrationService.cs

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,10 @@
55
using TUnit.Core;
66
using TUnit.Core.Data;
77
using TUnit.Core.Enums;
8-
using TUnit.Core.Helpers;
98
using TUnit.Core.Interfaces;
109
using TUnit.Core.Interfaces.SourceGenerator;
1110
using TUnit.Core.PropertyInjection;
1211
using TUnit.Core.Tracking;
13-
using TUnit.Engine.Helpers;
1412

1513
namespace TUnit.Engine.Services;
1614

@@ -97,19 +95,6 @@ private async ValueTask RegisterPropertiesAsync(TestContext testContext)
9795
// Create the data source for this property
9896
var dataSource = metadata.CreateDataSource();
9997

100-
// Create PropertyMetadata for MembersToGenerate
101-
var containingTypeMetadata = ClassMetadataHelper.GetOrCreateClassMetadata(metadata.ContainingType);
102-
var propMetadata = new PropertyMetadata
103-
{
104-
IsStatic = false,
105-
Name = metadata.PropertyName,
106-
ClassMetadata = containingTypeMetadata,
107-
Type = metadata.PropertyType,
108-
ReflectionInfo = PropertyHelper.GetPropertyInfo(metadata.ContainingType, metadata.PropertyName),
109-
Getter = parent => PropertyHelper.GetPropertyInfo(metadata.ContainingType, metadata.PropertyName).GetValue(parent!)!,
110-
ContainingTypeMetadata = containingTypeMetadata
111-
};
112-
11398
// Create minimal DataGeneratorMetadata for property resolution during registration
11499
var testBuilderContext = new TestBuilderContext
115100
{
@@ -122,7 +107,7 @@ private async ValueTask RegisterPropertiesAsync(TestContext testContext)
122107
var dataGenMetadata = new DataGeneratorMetadata
123108
{
124109
TestBuilderContext = new TestBuilderContextAccessor(testBuilderContext),
125-
MembersToGenerate = [propMetadata], // Pass the property metadata
110+
MembersToGenerate = [], // Properties don't use member generation
126111
TestInformation = testContext.TestDetails.MethodMetadata,
127112
Type = DataGeneratorType.Property,
128113
TestSessionId = TestSessionContext.Current?.Id ?? "registration",

0 commit comments

Comments
 (0)