ASP.NET Core 集成测试中结合 WebApplicationFactory 使用 SQLite 内存数据库
SQLite 内存数据库(in-memory database)的连接字符串是 Data Source=:memory: ,它的特点是数据库连接一关闭,数据库就会被删除。而使用 services.AddDbContext 通过连接字符串配置 EF Core 时,EF Core 会在每次查询或 SaveChanges 后立即关闭数据库连接。在这样的情况下,集成测试中就无法在向 SQLite 内存数据库写入数据库后进行查询测试。
为了解决上述问题,我们就不能让 EF Core 自己自动维护数据库连接,而只能改为手动模式,手工创建并打开 SqliteConnection 给 EF Core 使用,在用完之后的适当时候关闭连接。
除此之外,由于在每次打开数据库连接都会创建新的数据库,所以还要解决在什么写入数据之前完成数据库的初始化。
结合 WebApplicationFactory ,我们用下面继承自 WebApplicationFactory 的实现代码解决了问题。
集成测试中的示例代码如下
原文地址: https://www.cnblogs.com/dudu/p/9765937.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
ASP.NET Core 集成测试中结合 WebApplicationFactory 使用 SQLite 内存数据库相关推荐
- ASP.NET Core 集成测试中模拟登录用户的一种姿势
不管哪种用户验证方式,最终都是在验证成功后设置 HttpContext.User ,后续处理环节通过 HttpContext.User 获取用户信息.如果能直接修改 HttpContext.User ...
- 007.Adding a view to an ASP.NET Core MVC app -- 【在asp.net core mvc中添加视图】
索引: 目录索引 Adding a view to an ASP.NET Core MVC app 在asp.net core mvc中添加视图 2017-3-4 7 分钟阅读时长 本文内容 1.Ch ...
- 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[上]:采用管道处理请求...
之所以称ASP.NET Core是一个Web开发平台,而不是一个单纯的开发框架,源于它具有一个极具扩展性的请求处理管道,我们可以通过对这个管道的定制来满足各种场景下的HTTP处理需求.ASP. NET ...
- ASP.NET Core MVC 中的 [Controller] 和 [NonController]
Controller VS NonController 中内置的约定 在 ASP.NET Core MVC 中已经统一了 MVC 和 Web Api 及 Web Pages, 他们具有相同的 Cont ...
- 如何在ASP.NET Core应用中实现与第三方IoC/DI框架的整合?
我们知道整个ASP.NET Core建立在以ServiceCollection/ServiceProvider为核心的DI框架上,它甚至提供了扩展点使我们可以与第三方DI框架进行整合.对此比较了解的读 ...
- NET问答: 如何将 ASP.NET Core WebAPI 中抛出的异常封装成对象?
咨询区 rianjs: 在 ASP.NET Core WebAPI 中,我的 Controller 代码如下: [Route("create-license/{licenseKey}&quo ...
- 如何在 Asp.Net Core MVC 中处理 null 值
译文链接:https://www.infoworld.com/article/3434624/how-to-handle-null-values-in-aspnet-core-mvc.html 传统的 ...
- 在 ASP.NET Core 项目中使用 AutoMapper 进行实体映射
一.前言 在实际项目开发过程中,我们使用到的各种 ORM 组件都可以很便捷的将我们获取到的数据绑定到对应的 List<T> 集合中,因为我们最终想要在页面上展示的数据与数据库实体类之间可能 ...
- 在 Asp.Net Core WebAPI 中防御跨站请求伪造攻击
什么是跨站请求伪造 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或 ...
最新文章
- linux nfs 进程,【Linux】 nfs 故障处理
- python 如何封装dll_如何为DLL库创建Python包装器
- C++中使用Json的方法
- 易创课堂上海站干货回顾
- 第二篇:Dapper中的一些复杂操作和inner join应该注意的坑
- 为什么 ++[[]][+[]]+[+[]] = 10 ?
- er图用什么软件_太牛逼!一款软件几乎可以操作所有的数据库!
- MacBook如何设置双面打印
- javascript视频教程下载
- php 车牌号限号,机动车限行尾号今天起轮换 周一至周五分别限行 4 和 9、5 和 0、1 和 6、2 和 7、3 和 8...
- 网络数据保障ptop_网络影响未来十大预言 宽带应用将与新媒体融合
- P1217 [USACO1.5]回文质数 Prime Palindromes——回文质数性质、打表
- Differences between Theorem, Lemma and Corollary, etc.
- JavaScript 高级
- 基于python的深度学习框架有_《用Python实现深度学习框架》上市
- android使用wifi连接android手机
- neo4j图数据库安装实践与报错解决
- 【Cron】学习:cron 表达式
- 一文读懂resource.arsc文件结构
- 【整理】Google代码风格(C++)——注释
热门文章
- 基于netty的企业即时通讯系统的设计与实-离线消息处理
- hdu 1879 继续畅通工程 (最小生成树)
- Linux的FHS(文件系统结构标准)剖析
- 如何改变X:\Users\XXX的用户名称
- CCNP课堂练习四:frame-relay traffic-shaping(帧中继流量×××)
- 哎,最近心情非常烦乱!
- .NET6之MiniAPI(十九):NLog
- 使用Blazor做个简单的时间戳在线转换工具
- 一起来庆祝 .NET 20 周年!
- .NET6使用DOCFX根据注释自动生成开发文档