You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级到Umbraco 10后使用UmbracoIntegrationTest报config参数为空错误

问题产生原因

该问题是Umbraco 10初始发布版本中测试SDK的已知逻辑缺陷,和项目升级步骤遗漏无关,全新项目可复现也印证了这一点:

  • UmbracoIntegrationTest基类在构建测试Host主机时,默认会尝试将宿主上下文的预加载配置传入AddConfiguration方法,但测试项目不会像正式Web项目那样自动初始化默认配置提供器,最终传入的config参数为null,触发ArgumentNullException。
  • 报错中TearDown阶段的NullReferenceException是连带错误:由于Setup阶段Host构建失败、实例未正常初始化,测试清理逻辑尝试释放不存在的Host实例时就会抛出该错误,不需要单独处理。
修复方案

根据实际场景选择对应方案即可:

  • 优先升级NuGet包
    将主项目和测试项目引用的所有Umbraco相关包(尤其是Umbraco.Cms.Tests、Umbraco.Cms.Web)升级到10.0.1及以上的v10补丁版本,官方已经在后续补丁中修复了测试基类的配置加载逻辑,升级后原有测试代码不需要任何修改即可正常运行。

    注意:必须保证测试项目安装的Umbraco相关包版本和主项目完全一致,版本不匹配也会触发同类配置加载错误。

  • 无法升级包版本时手动补全配置
    如果暂时不能升级Umbraco版本,可以在测试类中重写CreateHostBuilder方法,手动注入空的内存配置提供器,绕过空引用问题,参考代码如下:
    [TestFixture]
    [UmbracoTest(Database = UmbracoTestOptions.Database.NewEmptyPerTest)]
    public class TestClass : UmbracoIntegrationTest
    {
        protected override IHostBuilder CreateHostBuilder()
        {
            return base.CreateHostBuilder()
                .ConfigureAppConfiguration((context, builder) =>
                {
                    // 注入测试环境基础配置,避免config参数为null
                    builder.AddInMemoryCollection(new Dictionary<string, string>());
                });
        }
    
        [Test]
        public void Test1()
        {
            Assert.AreEqual(1, 1);
        }
    }
    

内容的提问来源于stack exchange,提问作者Stephan Lotter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:51:17