how to unit test asp.net core application with constructor dependency injection

后端 未结 5 1313
难免孤独
难免孤独 2020-12-07 10:43

I have a asp.net core application that uses dependency injection defined in the startup.cs class of the application:

    public void ConfigureServices(ISer         


        
5条回答
  •  鱼传尺愫
    2020-12-07 11:01

    A simple way, I wrote a generic dependency resolver helper class and then built the IWebHost in my unit test class.

    Generic Dependency Resolver

        public class DependencyResolverHelpercs
        {
            private readonly IWebHost _webHost;
    
            /// 
            public DependencyResolverHelpercs(IWebHost WebHost) => _webHost = WebHost;
    
            public T GetService()
            {
                using (var serviceScope = _webHost.Services.CreateScope())
                {
                    var services = serviceScope.ServiceProvider;
                    try
                    {
                        var scopedService = services.GetRequiredService();
                        return scopedService;
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                        throw;
                    }
                };
            }
        }
    }
    

    Unit Test Project

      [TestFixture]
        public class DependencyResolverTests
        {
            private DependencyResolverHelpercs _serviceProvider;
    
            public DependencyResolverTests()
            {
    
                var webHost = WebHost.CreateDefaultBuilder()
                    .UseStartup()
                    .Build();
                _serviceProvider = new DependencyResolverHelpercs(webHost);
            }
    
            [Test]
            public void Service_Should_Get_Resolved()
            {
    
                //Act
                var YourService = _serviceProvider.GetService();
    
                //Assert
                Assert.IsNotNull(YourService);
            }
    
    
        }
    

提交回复
热议问题