升级到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
相关产品推荐
相关产品推荐

