C# 依赖注入 单元测试

有时候程序在维护的当中会注入新的接口,和类,这个时候可能会把旧的接口和类给破坏掉。如果我们有单元测试(unit test)来保证它的话,就可以减少代码开发流程中的时间。

我们可以把配置依赖注入的代码放到一个或多个类当中。 然后我们就可以对它进行单元测试了。 如下的代码中 我们就把这个配置放到了 DIConfig类当中,然后我们在UnitTest的项目当中新建一个DIConfigTest的类。

public static class DIConfig
{
    public static IServiceProvider ConfigureServices()
    {
        var serviceCollection = new ServiceCollection();
        var configuration = new ConfigurationBuilder()
        .SetBasePath(AppContext.BaseDirectory)
        .AddJsonFile("appsettings.json", true)
        .AddEnvironmentVariables()// 把环境变量也放到 Configuraiton当中
        .Build();

        serviceCollection.AddSingleton((IConfiguration)configuration);

        serviceCollection.AddLogging(loggingBuilder =>
        {
            loggingBuilder.AddConfiguration(configuration.GetSection("Logging")); //配置logging的一些东西
            // 下面的这行需要 Microsoft.Extensions.Logging.Console
            loggingBuilder.AddConsole(); //加多个 每一个Ilooger下面就会有多个provider
        });

        // 注入了一个默认的ILogger
        serviceCollection.AddSingleton<Microsoft.Extensions.Logging.ILogger>((it) =>
        {
            return it.GetService<ILoggerFactory>().CreateLogger("categtory");
        });



        return serviceCollection.BuildServiceProvider();
    }
}

using Malema;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Xunit;

namespace TestProject1
{
    public class DIConfigTest
    {
        [Fact]
        public void DI_Should_Config_Correctly()
        {
            var sp = DIConfig.ConfigureServices();
            var configuration = sp.GetService<ILogger<IConfiguration>>();
            Assert.NotNull(configuration);
            //其它的注入
        }
    }
}

最近更新的
...