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

SQLite集成测试中出现MissingMethodException异常求助

排查SQLite内存库集成测试的异常问题

先给你梳理几个核心问题点,按优先级来排查:

1. EF Core版本严重不匹配(最可能的根源)

看你的项目配置:

  • DbContext类库(VSC.Repo)引用的是EF Core 7.0.2的全套组件(EntityFrameworkCore、SqlServer等)
  • 测试项目里的Microsoft.EntityFrameworkCore.Sqlite却还是6.0.13

EF Core的所有相关包版本必须严格统一,跨大版本的混用会导致大量兼容性错误,包括你遇到的这个NullReferenceException。

解决方案:
把测试项目里的Microsoft.EntityFrameworkCore.Sqlite版本升级到7.0.2,和类库保持一致:

<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="7.0.2" />

2. MSTest包版本冲突

你的测试项目里重复引用了不同版本的MSTest组件:

  • 既有MSTest.TestFramework 3.0.2
  • 又有MSTest.TestFramework 2.1.1和MSTest.TestAdapter 2.1.1

版本不一致会导致测试运行时的加载异常,建议统一升级到最新稳定版,清理重复引用:

<ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.7.2" /> <!-- 同步升级到对应适配版本 -->
    <PackageReference Include="MSTest.TestAdapter" Version="3.0.2" />
    <PackageReference Include="MSTest.TestFramework" Version="3.0.2" />
    <PackageReference Include="coverlet.collector" Version="3.2.0" /> <!-- 可选升级到最新版 -->
</ItemGroup>

3. SQLite内存库的连接优化(辅助排查)

虽然不是直接报错原因,但可以优化连接处理避免潜在问题:

  • 在SQLiteDatabaseContextFactory里,同步的EnsureCreated()可以改成异步的EnsureCreatedAsync(),和测试代码保持一致
  • 确保内存库的连接在整个测试过程中始终处于打开状态(你目前的代码已经做到了,但要注意不要提前释放)

修改后的SQLiteDatabaseContextFactory异步版本示例:

public class SQLiteDatabaseContextFactory : IDisposable
{
    private DbConnection _connection;

    private DbContextOptions<DataContext> CreateOptions()
    {
        return new DbContextOptionsBuilder<DataContext>()
            .UseSqlite(_connection).Options;
    }

    public async Task<DataContext> CreateContextAsync()
    {
        if (_connection == null)
        {
            _connection = new SqliteConnection("DataSource=:memory:");
            await _connection.OpenAsync();

            var options = CreateOptions();
            using var context = new DataContext(options);
            await context.Database.EnsureCreatedAsync();
        }

        return new DataContext(CreateOptions());
    }

    public void Dispose()
    {
        if (_connection != null)
        {
            _connection.Dispose();
            _connection = null;
        }
    }
}

最后验证步骤

  1. 清理所有NuGet缓存(可以用dotnet nuget locals all --clear命令)
  2. 重新还原所有包(dotnet restore)
  3. 重新生成解决方案后再运行测试

先解决版本冲突的问题,这应该能直接修复你遇到的NullReferenceException。

内容的提问来源于stack exchange,提问作者Miguel Ferreira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:36:10