- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 xUnit 和来自 Microsoft.AspNet.TestHost 的 TestServer
,如何将每个测试包装在一个数据库事务中,以便在测试后回滚?
下面是我如何创建 TestServer
:
TestServer = new TestServer(TestServer.CreateBuilder()
.UseStartup<Startup>());
那里引用的 Startup
是 Web 应用程序项目中的 Startup
。在该 Startup
类的 ConfigureServices
方法中,我像这样添加 EF:
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<TrailsDbContext>(options => options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
我可以将 DbContext
拉回到服务中并在 Startup
类上存储一个静态引用,但这看起来很老套。有什么方法可以在创建 TestServer
的地方实例化 DbContext
并以某种方式让 Web 应用程序使用它而不是 Startup
中的那个类(class)?
编辑:我尝试在创建 TestServer
的地方实例化另一个 DbContext
实例,并在每次测试前使用该上下文删除和重新创建数据库,但这增加了每个测试的运行时间约为 10 秒。
最佳答案
一些建议:最简单的方法是在最后销毁测试数据库并为每次测试运行重新创建。这确保不会存在挥之不去的测试污染。
但是既然你问了怎么做,这可以通过扩展 Xunit 来完成。 Xunit 允许您定义自定义测试用例和测试运行器。完整的答案很难包含在 SO 答案中。最简单的解决方案是使用环境事务。 (危险!环境事务可能很棘手。)Xunit 有一个回滚事务的自定义 BeforeAfterTestAttribute 示例。 https://github.com/xunit/samples.xunit/tree/master/AutoRollbackExample .要使用环境事务,请关闭在环境事务存在时抛出的默认 EF 设置。(optionsBuilder.UseSqlServer().SuppressAmbientTransactionWarning()
)。
一个更复杂但更好的解决方案是覆盖 XunitTestCaseRunner
并将事务注入(inject)每个测试用例,确保在每个测试结束时回滚。
此外,EF 文档提供了使用 InMemory 提供程序进行测试的示例。您可能会发现这很有用。 "Testing In Memory : EF Core Docs"
关于entity-framework-core - 如何在数据库事务中包装使用 TestServer 的集成测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35442673/
这对我来说没有任何意义,当参数相同时断言怎么会失败? ====================================================================== FA
我正在编写一个进程,在两个相同的 API 之间代理数据传输(FWIW,一个是在不同容器中运行的本地 API,另一个在云中)。 我想编写一些测试代码以确保数据传输代码执行应有的操作。到目前为止,我一直在
我正在使用AspNetCore TestServer并尝试连接到为NTLM身份验证配置的API服务。我正在连接的服务需要访问System.Security.Claims.ClaimsPrincipal
我目前正在为我的 ASP .Net Core 5 REST API 编写集成测试 (https://docs.microsoft.com/en-us/aspnet/core/test/integrat
我想测试/sitemap.xml/重定向到/sitemap.xml。我正在使用此代码: res = self.client.get('/sitemap.xml/') self.assertRedire
我想在 Django 中启动一个测试服务器,以便我能够通过 Jasmine/FrisbyJs 测试我的 API。 为此,我发现 python3 manage.py testserver 会创建一个测试
我正在使用自定义 WebApplication 工厂 public class CustomWebApplicationFactory : WebApplicationFactory where TS
使用 xUnit 和来自 Microsoft.AspNet.TestHost 的 TestServer,如何将每个测试包装在一个数据库事务中,以便在测试后回滚? 下面是我如何创建 TestServer
我正在开发一个新网站,该网站使用 Facebook API 供用户登录和图形 Api 的多个实现。 我的工作流程通常是: 在本地主机上开发 使用 MAMP/XAMPP 或类似软件开发 推送到服务器 -
我在 models.py 文件中定义了一个信号处理函数。在该文件的底部,我使用 signals.post_save.connect(myhandler, sender=myclass) 按照 http
我有一个控制台应用程序,它使用以下内容启动我们的一个 Web 项目。 using (var server = TestServer.Create()) Web 项目启动时需要检查其 web.confi
在 .net core api 中启用证书身份验证会导致 TestServer 在集成测试中始终返回 403-Forbidden(尽管请求中使用了证书)。 我尝试更改 TestClientProvid
http 配置通常在绑定(bind)到 Create 方法的启动类中设置。 但是,如果我想为所有测试启动一个 owin 服务器一次,但根据每个测试需要更新它的 http 配置怎么办? 这是不可能的。服
intro 之前我的项目里的集成测试是随机一个端口,每次都真实的启动一个 webserver,之前也有看到过微软文档上 testserver 的介绍,当时没仔细看过以为差不多就没用,一直是启动了一
我正在使用 owin TestServer 类对我的 web api 进行单元测试。除了我不确定如何对请求进行身份验证之外,它运行良好,因此我无法真正测试需要身份验证的端点,只能确保未经身份验证的请求
我有一个OpenIdDict基于AspNet.Security.OpenIdConnect.Server的认证服务器。设置按预期工作。 现在要做一些流程集成;跨越整个后端架构的系统测试,我使用 Tes
我正在尝试使用我的 IIS 托管 WebAPI 2.2 应用程序设置集成测试。我使用 Autofac 进行 DI,并且使用新的 ASP.net Identity 堆栈(该堆栈使用 OWIN)。我遇到了
我正在查看 Microsoft 源代码中的 Microsoft.AspNetCore.TestHost.TestServer 。在那里我看到 CreateClient() 属性是 HttpClient
我正在开发一个 Web API,在某些情况下会响应 500(我知道设计很丑,但对此无能为力)。在测试中,有一个包含 AspNetCore.TestHost 的 ApiFixture: public c
我一直在尝试使用 OWIN TestServer 类实现集成测试,除了 PUT 或 DELETE 方法的实现外,一切正常。 POST 方法代码(有效)如下所示: using (var server =
我是一名优秀的程序员,十分优秀!