8.7K Star 14.3K Fork 4.2K

GVPdotNET China/Furion

 / 详情

xunit集成测试时,环境变量设置不起作用

已完成
创建于  
2022-08-17 11:29

💢 特别说明:如果 Issue 没有严格按照模板编写且未提供测试源码下载或 Git 测试仓库地址,则视为无效 Issue,将直接关闭。

Furion 版本号

哪个版本号?
Furion.Pure 4.1.11

.NET SDK 版本号

  • .NET5
  • .NET6
  • .NET7

Web 项目类型

  • WebApi
  • Mvc
  • Razor Pages
  • Blazor Server
  • MinApp

描述你的问题

xunit集成测试时,环境变量设置不起作用
不管如何设置api程序集的环境变量,在环境变量一直显示是Production


异常堆栈信息

异常堆栈是什么?


测试项目代码

xunit测试

using var httpClient = _factory.CreateClient();

webapi程序

public class Startup : AppStartup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            var env = App.HostEnvironment;
            string environmentName = env.EnvironmentName; //这个地方总是Production环境
            var b = App.Configuration["Baidu:AppKey"];
            var a = App.GetConfig<List<ConnectionConfig>>("ConnectionConfigs");
            var c = App.Configuration.GetSection("ConnectionConfigs").Get<List<ConnectionConfig>>();

            services.AddFileLogging(options =>
            {
                options.FileNameRule = fileName =>
                {
                    return string.Format(fileName, DateTime.Now);
                };
            });
            services.AddFileLogging("logs/error/error-{0:yyyy}-{0:MM}-{0:dd}.log", options =>
            {
                options.FileNameRule = fileName =>
                {
                    return string.Format(fileName, DateTime.Now);
                };
                options.WriteFilter = (logMsg) =>
                {
                    return logMsg.LogLevel == LogLevel.Error;
                };
            });

            // 添加即时通讯
            services.AddSignalR();

            services.AddCorsAccessor();

            services.AddMvcFilter<LoggingMonitorAttribute>();

            //全局映射
            TypeAdapterConfig.GlobalSettings.Default.PreserveReference(true);

            //定时任务
            services.AddTaskScheduler();

            #region 认证和授权
            services.AddJwt((options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            }), null, (o =>
            {
                o.Events = new()
                {
                    OnMessageReceived = (context) =>
                    {
                        if (!context.HttpContext.Request.Path.HasValue)
                        {
                            return Task.CompletedTask;
                        }
                        var path = context.HttpContext.Request.Path;
                        if (path.StartsWithSegments("/hubs/chathub"))
                        {
                            var accessToken = context.Request.Query["access_token"];
                            if (!string.IsNullOrWhiteSpace(accessToken))
                            {
                                context.Token = accessToken;
                            }
                        }
                        return Task.CompletedTask;
                    }
                };
            }));
            services.AddAuthorization();
            #endregion

            BaiduIntelligent.AddBaiduIntelligentSetup(services);

            services.AddControllers().AddInjectWithUnifyResult<RESTfulResultProvider>();

            SqlsugarSetup.AddSqlsugarSetup(services);

            services.AddSingleton<IUserIdProvider, UserIdProvider>();

            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

            //注册事件订阅
            services.AddEventBus();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            // 添加规范化结果状态码,需要在这里注册
            app.UseUnifyResultStatusCodes();

            app.UseHttpsRedirection();

            app.Use((context, next) =>
            {
                context.Request.EnableBuffering();
                return next();
            });

            app.UseRouting();

            // 配置跨域
            // 注意 SignalR 必须使用 AllowCredentials,其他的可以自由配置
            app.UseCorsAccessor(builder =>
            builder.SetIsOriginAllowed(_ => true)
            .AllowAnyMethod()
            .AllowAnyHeader()
            .AllowCredentials());

            app.UseAuthentication();
            app.UseAuthorization();

            app.UseInject(string.Empty);

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapHub<ChatHub>("/hubs/chathub");
                endpoints.MapControllers();
            });
        }
    }

您的代码下载地址?


数据库信息

  • Sqlite
  • SqlServer
  • Mysql
  • Oracle
  • PGSql
  • Firebird
  • Cosmos

期待结果

能够顺利的进行单元测试和集成测试,和.net 6 一样在未配置环境变量时,集成测试使用Development 环境

评论 (12)

lgw 创建了任务 3年前

能否提供一个demo。。。我这样很难搞。。。

lgw-lgw2403 lgw
回复 百小僧 拥有者
3年前

git@github.com:lgw2403/FurionXunitTest.git

百小僧 任务状态待办的 修改为已完成 3年前

这个解决方案,您验证过吗,我这边总是报 未将对象引用到对象的实例
protected override IWebHostBuilder CreateWebHostBuilder() { return base.CreateWebHostBuilder().UseEnvironment("Development"); //这个地方报错 }

1.我是图片中的方法,.net 6.0是支持环境变量的更改的,但是 在Furion 中使用 Serve.Run(RunOptions.Default); 方式启动项目时,环境变量怎么也修改不了
输入图片说明

2.net 6.0 集成测试时在不使用 WithWebHostBuilder 进行环境变量修改时,默认也是加载程序集中的环境变量配置,.net 6.0 在集成测试时 环境变量是没有问题的

3.如果我不使用Serve.Run(RunOptions.Default); 方式启动程序,而是使用 WebApplication.CreateBuilder(args).Inject(); 方式, 环境变量也是没有问题的

所以我怀疑Serve.Run(RunOptions.Default); 方式启动程序时加载环境变量的逻辑出现了问题

974299 monksoul 1578937227 百小僧 拥有者
回复 lgw
3年前

提供测试截图,代码,证明 Furion 错误,而不是一个无关紧要的说明,就说 Furion 出问题了,那么你提供一个正常的代码发上来,包括测试步骤,测试截图。

百小僧 任务状态已完成 修改为待办的 3年前

v4.2.4 版本, Serve.Run(RunOptions.Default.WithArgs(args));

百小僧 任务状态待办的 修改为已完成 3年前

非常感谢您,Furion 升级v4.2.4 版本,测试通过了
下次我提交问题时,会提供代码和详细的操作步骤的

974299 monksoul 1578937227 百小僧 拥有者
回复 lgw
3年前

客气了,昨天搞到凌晨两点,重写了这快。

大神辛苦了,你是我们的骄傲!!!

过誉了,有点受宠若惊。

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(3)
974299 monksoul 1578937227 lgw-lgw2403 千军万马-joyswing
C#
1
https://gitee.com/dotnetchina/Furion.git
git@gitee.com:dotnetchina/Furion.git
dotnetchina
Furion
Furion

搜索帮助