NetCore Xunit单元测试依赖注入

1.添加Nuget: Xunit.DependencyInjection

install-package Xunit.DependencyInjection -project CustProjectName

2.Xunit项目根目录添加文件: Startup.cs

复制代码
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;

/// <summary>
/// Xunit.DependencyInjection 7.3.0
/// </summary>
namespace CoreXUnitTestProject
{
    // Startup 需要继承于 DependencyInjectionTestFramework
    public class Startup
    {
        // 自定义 host 构建
        public void ConfigureHost(IHostBuilder hostBuilder)
        {
            //hostBuilder.ConfigureAppConfiguration(builder =>
            //{
            //    // 注册配置
            //    builder.AddInMemoryCollection(new Dictionary<string, string>()
            //    {
            //        {"UserName", "Alice"}
            //    }).AddJsonFile("appsettings.json");
            //})
            //.ConfigureServices((context, services) =>
            //{
            //    // 注册自定义服务
            //    services.AddSingleton<IIdGenerator, GuidIdGenerator>();
            //    if (context.Configuration.GetAppSetting<bool>("XxxEnabled"))
            //    {
            //        services.AddSingleton<IUserIdProvider, EnvironmentUserIdProvider>();
            //    }
            //});
        }


        /// <summary>
        /// 
        /// 支持的形式:
        /// ConfigureServices(IServiceCollection services)
        /// ConfigureServices(IServiceCollection services, HostBuilderContext hostBuilderContext)
        /// ConfigureServices(HostBuilderContext hostBuilderContext, IServiceCollection services)
        /// </summary>
        /// <param name="services"></param>
        /// <param name="hostBuilderContext"></param>
        public void ConfigureServices(IServiceCollection services, HostBuilderContext hostBuilderContext)
        {
            services.AddTransient<ITestService, TestService>();
        }

        /// <summary>
        /// 可以添加要用到的方法参数,会自动从注册的服务中获取服务实例,类似于 asp.net core 里 Configure 方法
        /// </summary>
        /// <param name="provider"></param>
        public void Configure(IServiceProvider provider)
        {

        }
    }
}
复制代码

2.1.如果需要注入泛型

            services.AddSingleton<XxxDo>();
            services.AddSingleton<XxxDto>();
            // services.AddTransient(typeof(IBaseDal<XxxDo, XxxDto>),  typeof(MemoryBaseDal<XxxDo, XxxDto>));
            services.AddTransient(typeof(IBaseDal<,>), typeof(MemoryBaseDal<,>));

3.使用和CoreWebApi一样,正常注入

复制代码
    public class TestAutofac : BaseTesting
    {
        public readonly ITestService _testService;
        public TestAutofac(ITestOutputHelper testOutputHelper, ITestService testService) : base(testOutputHelper)
        {
            _testService = testService;
        }

        [Fact]
        public void TestRun()
        {
            var result = _testService.Run();
            _testOutputHelper.WriteLine(result);
        }
    }
复制代码

 

Reference:

https://www.cnblogs.com/weihanli/p/13941796.html

https://mp.weixin.qq.com/s?__biz=MzAxMjE2NTMxMw%3D%3D&chksm=8c2e7fefbb59f6f989257005f61c329ca0fd2eb35f6c9ca65072643a9bdccafcd882cb54b8e9&idx=1&mid=2456606273&scene=21&sn=dbc624f92e37db2a4482c266a59b9f05#wechat_redirect

https://blog.csdn.net/sD7O95O/article/details/107437559

 

posted @   Robot-Blog  阅读(446)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示