首页 新闻 会员 周边 捐助

xunit 升级后 TheoryData 不支持 SelectMany

0
悬赏园豆:30 [已解决问题] 解决于 2025-05-01 18:43

xunit 从 2.4.2 升级至 2.9.3 之后,下面的代码中 SelectMany 编译报错

foreach (var options in TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions<ConfigurationDbContext>) y)).ToList())
{
    using (var context = new ConfigurationDbContext(options, StoreOptions))
        context.Database.EnsureCreated();
}

错误信息如下

TheoryData<DbContextOptions<ConfigurationDbContext>>' does not contain a definition for 'SelectMany' ...
dudu的主页 dudu | 高人七级 | 园豆:24728
提问于:2025-05-01 10:24
< >
分享
最佳答案
0

TheoryData<T>TheoryData 实现的接口变更引起的

xunit 2.4.2 中

public class TheoryData<T> : TheoryData
{
}

public abstract class TheoryData : IEnumerable<object[]>
{ }

在 2.9.3 中

public class TheoryData<T> : TheoryData, IEnumerable<T>
{ }

public abstract class TheoryData : IReadOnlyCollection<object[]>
{ }

对应的代码变更:

将类型转换为 IReadOnlyCollection<object[]> 即可解决

foreach (var options in (TestDatabaseProviders as IReadOnlyCollection<object[]>).SelectMany(x => x.Select(y => (DbContextOptions<ConfigurationDbContext>) y)).ToList())
{
    using (var context = new ConfigurationDbContext(options, StoreOptions))
        context.Database.EnsureCreated();
}
dudu | 高人七级 |园豆:24728 | 2025-05-01 18:43

更好的解决方法是将

public static readonly TheoryData<DbContextOptions<TDbContext>> TestDatabaseProviders;

改为

public static readonly IReadOnlyCollection<object[]> TestDatabaseProviders;
dudu | 园豆:24728 (高人七级) | 2025-05-01 18:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册