Skip to content

Commit

Permalink
TryAddEnumerable test avoid false negatives (#96871)
Browse files Browse the repository at this point in the history
  • Loading branch information
tommysor authored and pull[bot] committed Sep 20, 2024
1 parent e6c85df commit ae572e8
Showing 1 changed file with 14 additions and 47 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -262,26 +262,27 @@ public static TheoryData TryAddEnumerableImplementationTypeData
{
var serviceType = typeof(IFakeService);
var implementationType = typeof(FakeService);
return new TheoryData<ServiceDescriptor, Type, object, Type, ServiceLifetime>
return new TheoryData<Func<ServiceDescriptor>, Type, object, Type, ServiceLifetime>
{
{ ServiceDescriptor.KeyedTransient<IFakeService, FakeService>("service1"), serviceType, "service1", implementationType, ServiceLifetime.Transient },
{ ServiceDescriptor.KeyedTransient<IFakeService, FakeService>("service2", (s,k) => new FakeService()), serviceType, "service2", implementationType, ServiceLifetime.Transient },
{ () => ServiceDescriptor.KeyedTransient<IFakeService, FakeService>("service1"), serviceType, "service1", implementationType, ServiceLifetime.Transient },
{ () => ServiceDescriptor.KeyedTransient<IFakeService, FakeService>("service2", (s,k) => new FakeService()), serviceType, "service2", implementationType, ServiceLifetime.Transient },
{ () => ServiceDescriptor.KeyedTransient<IFakeService, FakeService>(7), serviceType, 7, implementationType, ServiceLifetime.Transient },

{ ServiceDescriptor.KeyedScoped<IFakeService, FakeService>("service3"), serviceType, "service3", implementationType, ServiceLifetime.Scoped },
{ ServiceDescriptor.KeyedScoped<IFakeService, FakeService>("service4", (s,k) => new FakeService()), serviceType, "service4", implementationType, ServiceLifetime.Scoped },
{ () => ServiceDescriptor.KeyedScoped<IFakeService, FakeService>("service3"), serviceType, "service3", implementationType, ServiceLifetime.Scoped },
{ () => ServiceDescriptor.KeyedScoped<IFakeService, FakeService>("service4", (s,k) => new FakeService()), serviceType, "service4", implementationType, ServiceLifetime.Scoped },

{ ServiceDescriptor.KeyedSingleton<IFakeService, FakeService>("service5"), serviceType, "service5", implementationType, ServiceLifetime.Singleton },
{ ServiceDescriptor.KeyedSingleton<IFakeService, FakeService>("service6", (s,k) => new FakeService()), serviceType, "service6", implementationType, ServiceLifetime.Singleton },
{ () => ServiceDescriptor.KeyedSingleton<IFakeService, FakeService>("service5"), serviceType, "service5", implementationType, ServiceLifetime.Singleton },
{ () => ServiceDescriptor.KeyedSingleton<IFakeService, FakeService>("service6", (s,k) => new FakeService()), serviceType, "service6", implementationType, ServiceLifetime.Singleton },

{ ServiceDescriptor.KeyedSingleton<IFakeService>("service6", _instance), serviceType, "service6", implementationType, ServiceLifetime.Singleton },
{ () => ServiceDescriptor.KeyedSingleton<IFakeService>("service6", _instance), serviceType, "service6", implementationType, ServiceLifetime.Singleton },
};
}
}

[Theory]
[MemberData(nameof(TryAddEnumerableImplementationTypeData))]
public void TryAddEnumerable_AddsService(
ServiceDescriptor descriptor,
Func<ServiceDescriptor> createDescriptor,
Type expectedServiceType,
object expectedKey,
Type expectedImplementationType,
Expand All @@ -291,7 +292,7 @@ public void TryAddEnumerable_AddsService(
var collection = new ServiceCollection();

// Act
collection.TryAddEnumerable(descriptor);
collection.TryAddEnumerable(createDescriptor());

// Assert
var d = Assert.Single(collection);
Expand All @@ -305,18 +306,18 @@ public void TryAddEnumerable_AddsService(
[Theory]
[MemberData(nameof(TryAddEnumerableImplementationTypeData))]
public void TryAddEnumerable_DoesNotAddDuplicate(
ServiceDescriptor descriptor,
Func<ServiceDescriptor> createDescriptor,
Type expectedServiceType,
object expectedKey,
Type expectedImplementationType,
ServiceLifetime expectedLifetime)
{
// Arrange
var collection = new ServiceCollection();
collection.TryAddEnumerable(descriptor);
collection.TryAddEnumerable(createDescriptor());

// Act
collection.TryAddEnumerable(descriptor);
collection.TryAddEnumerable(createDescriptor());

// Assert
var d = Assert.Single(collection);
Expand All @@ -326,40 +327,6 @@ public void TryAddEnumerable_DoesNotAddDuplicate(
Assert.Equal(expectedLifetime, d.Lifetime);
}

[Fact]
public void TryAddEnumerable_DoesNotAddDuplicateWhenKeyIsInt()
{
// Arrange
var collection = new ServiceCollection();
var descriptor1 = ServiceDescriptor.KeyedTransient<IFakeService, FakeService>(1);
collection.TryAddEnumerable(descriptor1);
var descriptor2 = ServiceDescriptor.KeyedTransient<IFakeService, FakeService>(1);

// Act
collection.TryAddEnumerable(descriptor2);

// Assert
var d = Assert.Single(collection);
Assert.Same(descriptor1, d);
}

[Fact]
public void TryAddEnumerable_DoesNotAddDuplicateWhenKeyIsString()
{
// Arrange
var collection = new ServiceCollection();
var descriptor1 = ServiceDescriptor.KeyedTransient<IFakeService, FakeService>("service1");
collection.TryAddEnumerable(descriptor1);
var descriptor2 = ServiceDescriptor.KeyedTransient<IFakeService, FakeService>("service1");

// Act
collection.TryAddEnumerable(descriptor2);

// Assert
var d = Assert.Single(collection);
Assert.Same(descriptor1, d);
}

public static TheoryData TryAddEnumerableInvalidImplementationTypeData
{
get
Expand Down

0 comments on commit ae572e8

Please sign in to comment.