From bf73ecce32b0bf154454ae04c1236aa0cd06e0fa Mon Sep 17 00:00:00 2001 From: Oliver Booth Date: Sun, 2 Apr 2023 03:31:19 +0100 Subject: [PATCH] test: add unit tests for ServiceCollectionExtensions --- X10D.Tests/X10D.Tests.csproj | 2 + .../src/Hosting/ServiceCollectionTests.cs | 60 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 X10D.Tests/src/Hosting/ServiceCollectionTests.cs diff --git a/X10D.Tests/X10D.Tests.csproj b/X10D.Tests/X10D.Tests.csproj index c3d7b6b..d6512d8 100644 --- a/X10D.Tests/X10D.Tests.csproj +++ b/X10D.Tests/X10D.Tests.csproj @@ -14,6 +14,7 @@ + @@ -25,6 +26,7 @@ + diff --git a/X10D.Tests/src/Hosting/ServiceCollectionTests.cs b/X10D.Tests/src/Hosting/ServiceCollectionTests.cs new file mode 100644 index 0000000..3713763 --- /dev/null +++ b/X10D.Tests/src/Hosting/ServiceCollectionTests.cs @@ -0,0 +1,60 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; +using X10D.Hosting.DependencyInjection; + +namespace X10D.Tests.Hosting; + +[TestClass] +public class ServiceCollectionTests +{ + [TestMethod] + public void AddHostedSingleton_ShouldRegisterServiceAsSingletonAndAsHostedService() + { + var services = new ServiceCollection(); + + services.AddHostedSingleton(); + + var serviceProvider = services.BuildServiceProvider(); + var service = serviceProvider.GetService(); + var hostedService = serviceProvider.GetService(); + + Assert.IsNotNull(service); + Assert.IsNotNull(hostedService); + Assert.IsInstanceOfType(service, typeof(TestService)); + Assert.IsInstanceOfType(hostedService, typeof(TestService)); + Assert.AreSame(service, hostedService); + } + + [TestMethod] + public void AddHostedSingleton_ShouldRegisterServiceTypeAsSingletonAndAsHostedService() + { + var services = new ServiceCollection(); + + services.AddHostedSingleton(typeof(TestService)); + + var serviceProvider = services.BuildServiceProvider(); + var service = serviceProvider.GetService(); + var hostedService = serviceProvider.GetService(); + + Assert.IsNotNull(service); + Assert.IsNotNull(hostedService); + Assert.IsInstanceOfType(service, typeof(TestService)); + Assert.IsInstanceOfType(hostedService, typeof(TestService)); + Assert.AreSame(service, hostedService); + } + + private sealed class TestService : IHostedService + { + public Task StartAsync(CancellationToken cancellationToken) + { + return Task.CompletedTask; + } + + public Task StopAsync(CancellationToken cancellationToken) + { + return Task.CompletedTask; + } + } +}