From ae572e8848a8f0ab98408d9e2c4860c83ce9951f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tommy=20S=C3=B8rbr=C3=A5ten?= Date: Tue, 13 Feb 2024 23:46:43 +0100 Subject: [PATCH] TryAddEnumerable test avoid false negatives (#96871) --- ...iceCollectionKeyedServiceExtensionsTest.cs | 61 +++++-------------- 1 file changed, 14 insertions(+), 47 deletions(-) diff --git a/src/libraries/Microsoft.Extensions.DependencyInjection/tests/DI.Tests/ServiceCollectionKeyedServiceExtensionsTest.cs b/src/libraries/Microsoft.Extensions.DependencyInjection/tests/DI.Tests/ServiceCollectionKeyedServiceExtensionsTest.cs index 6be7e22cce2c35..3715c619c8fa42 100644 --- a/src/libraries/Microsoft.Extensions.DependencyInjection/tests/DI.Tests/ServiceCollectionKeyedServiceExtensionsTest.cs +++ b/src/libraries/Microsoft.Extensions.DependencyInjection/tests/DI.Tests/ServiceCollectionKeyedServiceExtensionsTest.cs @@ -262,18 +262,19 @@ public static TheoryData TryAddEnumerableImplementationTypeData { var serviceType = typeof(IFakeService); var implementationType = typeof(FakeService); - return new TheoryData + return new TheoryData, Type, object, Type, ServiceLifetime> { - { ServiceDescriptor.KeyedTransient("service1"), serviceType, "service1", implementationType, ServiceLifetime.Transient }, - { ServiceDescriptor.KeyedTransient("service2", (s,k) => new FakeService()), serviceType, "service2", implementationType, ServiceLifetime.Transient }, + { () => ServiceDescriptor.KeyedTransient("service1"), serviceType, "service1", implementationType, ServiceLifetime.Transient }, + { () => ServiceDescriptor.KeyedTransient("service2", (s,k) => new FakeService()), serviceType, "service2", implementationType, ServiceLifetime.Transient }, + { () => ServiceDescriptor.KeyedTransient(7), serviceType, 7, implementationType, ServiceLifetime.Transient }, - { ServiceDescriptor.KeyedScoped("service3"), serviceType, "service3", implementationType, ServiceLifetime.Scoped }, - { ServiceDescriptor.KeyedScoped("service4", (s,k) => new FakeService()), serviceType, "service4", implementationType, ServiceLifetime.Scoped }, + { () => ServiceDescriptor.KeyedScoped("service3"), serviceType, "service3", implementationType, ServiceLifetime.Scoped }, + { () => ServiceDescriptor.KeyedScoped("service4", (s,k) => new FakeService()), serviceType, "service4", implementationType, ServiceLifetime.Scoped }, - { ServiceDescriptor.KeyedSingleton("service5"), serviceType, "service5", implementationType, ServiceLifetime.Singleton }, - { ServiceDescriptor.KeyedSingleton("service6", (s,k) => new FakeService()), serviceType, "service6", implementationType, ServiceLifetime.Singleton }, + { () => ServiceDescriptor.KeyedSingleton("service5"), serviceType, "service5", implementationType, ServiceLifetime.Singleton }, + { () => ServiceDescriptor.KeyedSingleton("service6", (s,k) => new FakeService()), serviceType, "service6", implementationType, ServiceLifetime.Singleton }, - { ServiceDescriptor.KeyedSingleton("service6", _instance), serviceType, "service6", implementationType, ServiceLifetime.Singleton }, + { () => ServiceDescriptor.KeyedSingleton("service6", _instance), serviceType, "service6", implementationType, ServiceLifetime.Singleton }, }; } } @@ -281,7 +282,7 @@ public static TheoryData TryAddEnumerableImplementationTypeData [Theory] [MemberData(nameof(TryAddEnumerableImplementationTypeData))] public void TryAddEnumerable_AddsService( - ServiceDescriptor descriptor, + Func createDescriptor, Type expectedServiceType, object expectedKey, Type expectedImplementationType, @@ -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); @@ -305,7 +306,7 @@ public void TryAddEnumerable_AddsService( [Theory] [MemberData(nameof(TryAddEnumerableImplementationTypeData))] public void TryAddEnumerable_DoesNotAddDuplicate( - ServiceDescriptor descriptor, + Func createDescriptor, Type expectedServiceType, object expectedKey, Type expectedImplementationType, @@ -313,10 +314,10 @@ public void TryAddEnumerable_DoesNotAddDuplicate( { // Arrange var collection = new ServiceCollection(); - collection.TryAddEnumerable(descriptor); + collection.TryAddEnumerable(createDescriptor()); // Act - collection.TryAddEnumerable(descriptor); + collection.TryAddEnumerable(createDescriptor()); // Assert var d = Assert.Single(collection); @@ -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(1); - collection.TryAddEnumerable(descriptor1); - var descriptor2 = ServiceDescriptor.KeyedTransient(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("service1"); - collection.TryAddEnumerable(descriptor1); - var descriptor2 = ServiceDescriptor.KeyedTransient("service1"); - - // Act - collection.TryAddEnumerable(descriptor2); - - // Assert - var d = Assert.Single(collection); - Assert.Same(descriptor1, d); - } - public static TheoryData TryAddEnumerableInvalidImplementationTypeData { get