当前位置: 首页 > 知识库问答 >
问题:

asp-net核心集成测试每次测试后回滚事务

叶德本
2023-03-14

我将此文档用于集成测试:ASP.NET核心集成测试,这是我的简化集成测试:

 public class ApplicationControllerTests : IClassFixture<CustomWebApplicationFactory<Startup>>
 {
     private readonly CustomWebApplicationFactory<Startup> _factory;

     public ApplicationControllerTests(CustomWebApplicationFactory<Startup> factory)
     {
           _factory = factory;
     }

    [Fact]
    public async Task AcceptOffer_WhenCalled_ShouldReturnSuccess()
    {
        var httpClient = factory.CreateClient();

        var acceptOfferRequest = new AcceptOfferRequest
        {
            OfferId = 1,
            OfferType = 1
        }.ToJsonStringContent();

        var response = await httpClient.PostAsync("/api/v1/Application/AcceptOffer", acceptOfferRequest);

        response.EnsureSuccess();

        Assert.Equal(HttpStatusCode.OK, response.StatusCode);
    }
}

正如您所看到的,我正在向“/API/v1/application/acceptoffer”API发送一个HTTP请求,该API更新数据库中的一些实体,如果一切正常,则返回状态代码200。

一个解决方案是使用DbContext的单例,然后将所有测试包装在事务中,但问题是SQL不支持嵌套事务,如果API也使用事务,它将引发运行时异常。另一个解决方案是使用C#的TransactionScope,但它不能用于SQL事务,也不能用于不同的线程。

共有1个答案

太叔经赋
2023-03-14

好吧,因为我发现没有好的方法或可能解决这个问题使用事务。我编写了全局脚本,而不是事务,在全局脚本中,我手动截断所有表,并在每次测试后执行它。这显然比删除和重新创建数据库要快。

 类似资料:
  • 迁移工作得很好,但事务根本不起作用。 我尝试公开我的设置: 运行在docker容器中的MariaDB 10.1(我已经证明了测试中使用的所有表都在InnoDB中,因此支持事务处理) 基测试类正在使用 我尝试了一个单独的连接与一起进行测试,并使用默认连接进行测试。事务也不起作用

  • 我有一个C#Asp。Net Core(1.x)项目,实现web REST API及其相关的集成测试项目,其中在任何测试之前,都有类似以下设置: 在测试期间,用于将HTTP请求发送到Web API(测试中的系统)并检索响应。 在实际的测试系统中,有一些组件从每个请求中提取发送方IP地址,如下所示: 现在,在集成测试期间,这段代码无法找到IP地址,因为始终为空。 有没有办法从测试代码中将其设置为某个已

  • 问题内容: 是否有人对从集成测试框架(如Selenium)进行的回滚数据库事务的最佳实践或首选方式有任何建议? 这是当前的情况:我们有一个.net Web项目,其中包含许多在单元测试环境中可以正常工作的单元测试- 每个测试都继承一个父类,该父类在[SetUp]中打开一个事务,并在其中回滚该事务。 [TearDown]。每次测试后,我们的单元测试数据库都恢复到原始状态。 但是,一旦进入集成环境,情况

  • 英文原文:http://emberjs.com/guides/testing/integration/ 集成测试通常用来测试应用中得重要工作流。集成测试用来模拟用户交互和确认交互结果。 设置 为了对Ember应用进行集成测试,需要在测试框架中运行应用。首先需要将根元素(root element)设置为任意一个已知将存在的元素。如果根元素在测试运行时可见的话,这对测试驱动开发非常有用,带来的帮助非常

  • 问题内容: 我正在运行一个简单的JUnit测试,又是一个应用程序DAO。问题是我总是得到: JUnit测试是: 如你所见,我明确声明不回滚此方法。 Spring JUnit支持是否总是将rollback设置为true? 问题答案: 它应该可以正常工作,就像你期望的那样,但是可能是你在被测类中打开了另一个事务,或者某个地方有其他功能/或错误。 顺便说一句,这个注释应该是足够的: