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 内存数据库相关推荐

  1. ASP.NET Core 集成测试中模拟登录用户的一种姿势

    不管哪种用户验证方式,最终都是在验证成功后设置 HttpContext.User ,后续处理环节通过 HttpContext.User 获取用户信息.如果能直接修改 HttpContext.User ...

  2. 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 ...

  3. 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[上]:采用管道处理请求...

    之所以称ASP.NET Core是一个Web开发平台,而不是一个单纯的开发框架,源于它具有一个极具扩展性的请求处理管道,我们可以通过对这个管道的定制来满足各种场景下的HTTP处理需求.ASP. NET ...

  4. ASP.NET Core MVC 中的 [Controller] 和 [NonController]

    Controller VS NonController 中内置的约定 在 ASP.NET Core MVC 中已经统一了 MVC 和 Web Api 及 Web Pages, 他们具有相同的 Cont ...

  5. 如何在ASP.NET Core应用中实现与第三方IoC/DI框架的整合?

    我们知道整个ASP.NET Core建立在以ServiceCollection/ServiceProvider为核心的DI框架上,它甚至提供了扩展点使我们可以与第三方DI框架进行整合.对此比较了解的读 ...

  6. NET问答: 如何将 ASP.NET Core WebAPI 中抛出的异常封装成对象?

    咨询区 rianjs: 在 ASP.NET Core WebAPI 中,我的 Controller 代码如下: [Route("create-license/{licenseKey}&quo ...

  7. 如何在 Asp.Net Core MVC 中处理 null 值

    译文链接:https://www.infoworld.com/article/3434624/how-to-handle-null-values-in-aspnet-core-mvc.html 传统的 ...

  8. 在 ASP.NET Core 项目中使用 AutoMapper 进行实体映射

    一.前言 在实际项目开发过程中,我们使用到的各种 ORM 组件都可以很便捷的将我们获取到的数据绑定到对应的 List<T> 集合中,因为我们最终想要在页面上展示的数据与数据库实体类之间可能 ...

  9. 在 Asp.Net Core WebAPI 中防御跨站请求伪造攻击

    什么是跨站请求伪造 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或 ...

最新文章

  1. linux nfs 进程,【Linux】 nfs 故障处理
  2. python 如何封装dll_如何为DLL库创建Python包装器
  3. C++中使用Json的方法
  4. 易创课堂上海站干货回顾
  5. 第二篇:Dapper中的一些复杂操作和inner join应该注意的坑
  6. 为什么 ++[[]][+[]]+[+[]] = 10 ?
  7. er图用什么软件_太牛逼!一款软件几乎可以操作所有的数据库!
  8. MacBook如何设置双面打印
  9. javascript视频教程下载
  10. php 车牌号限号,机动车限行尾号今天起轮换 周一至周五分别限行 4 和 9、5 和 0、1 和 6、2 和 7、3 和 8...
  11. 网络数据保障ptop_网络影响未来十大预言 宽带应用将与新媒体融合
  12. P1217 [USACO1.5]回文质数 Prime Palindromes——回文质数性质、打表
  13. Differences between Theorem, Lemma and Corollary, etc.
  14. JavaScript 高级
  15. 基于python的深度学习框架有_《用Python实现深度学习框架》上市
  16. android使用wifi连接android手机
  17. neo4j图数据库安装实践与报错解决
  18. 【Cron】学习:cron 表达式
  19. 一文读懂resource.arsc文件结构
  20. 【整理】Google代码风格(C++)——注释

热门文章

  1. 基于netty的企业即时通讯系统的设计与实-离线消息处理
  2. hdu 1879 继续畅通工程 (最小生成树)
  3. Linux的FHS(文件系统结构标准)剖析
  4. 如何改变X:\Users\XXX的用户名称
  5. CCNP课堂练习四:frame-relay traffic-shaping(帧中继流量×××)
  6. 哎,最近心情非常烦乱!
  7. .NET6之MiniAPI(十九):NLog
  8. 使用Blazor做个简单的时间戳在线转换工具
  9. 一起来庆祝 .NET 20 周年!
  10. .NET6使用DOCFX根据注释自动生成开发文档