集成测试访问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
相关产品推荐
相关产品推荐

