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

集成测试访问DBContext时无异常退出问题求助

问题详情

直接运行Web页面时,请求能正常到达控制器,调用DBContext从数据库获取单个对象,全程无问题。但用Playwright执行集成测试时,流程完全一致,程序却会在尝试从数据库获取数据时直接退出,且无任何异常抛出。

已经做过以下排查操作:

  • 移除了DBContext内的其他表
  • 尝试过使用不同的表与上下文

结果发现首次访问数据库时必现崩溃,且仅在测试环境中出现,直接运行应用完全正常。

另外发现一个矛盾点:测试代码中直接获取DBContext实例可以正常读写数据库,但被测系统(SUT)调用数据库相关代码时就会失败,例如这段代码:

string? conn = Database.GetConnectionString();
bool connected = this.Database.CanConnect();

相同代码在非测试环境运行完全正常,测试环境中执行就会触发崩溃,故障点略有波动,类似内存错误,但在C#中这种情况可能性较低。

测试代码如下:

[Test]
public void ScanTitleTestRunner() {
    Run(ScanTitleTest);
}

protected void Run(Func<IPage, Task> method) {
    Task task = Browser.WithPageAsync(method);
    task.Wait(45000); // 不会等待,直接返回
}

public async Task ScanTitleTest(IPage page) {
    // 准备
    await page.GotoAsync(Fixture.ServerAddress + "Scan");
    await page.WaitForLoadStateAsync(LoadState.DOMContentLoaded);

    // 断言
    Assert.AreEqual("Scan QR - Frontend", await page.TitleAsync());
}

页面加载时会调用控制器中的GetInt方法,正常应用中该方法返回1,但测试中调用此方法时程序会立即退出:

public int? GetInt() {
    return QRKeys.Select(x => 1).FirstOrDefault(); // 程序直接退出,无异常
}

调试时的细节:

  • 禁用JustMyCode后,程序能执行到实际数据库访问步骤再失败
  • 调试时按F10执行GetInt方法,调试窗口显示:
The thread '[Thread Destroyed]' (0x1510) has exited with code 0 (0x0).

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:08:09