gpt4 book ai didi

c# - 在 transactionScope 中使用客户端测试 WebAPI?

转载 作者:太空宇宙 更新时间:2023-11-03 13:42:48 24 4
gpt4 key购买 nike

问题

有什么方法可以为事务范围指定一个连接,以便可以回滚这种“脱离上下文”测试的影响吗?

背景

我正在使用 RestSharp 来测试 WebAPI Controller 。这是一个集成测试,通过向 API 发送请求进行测试,API 通过存储库和服务层一直向下传播到数据层。换句话说,这不是一个单元测试。

测试创建了一个 restClient 实例:

    [TestInitialize()]
public virtual void TestInitialize()
{

_client = new RestClient("http://localhost:24144");
_client.CookieContainer = new System.Net.CookieContainer();

}

然后客户端发出一些请求,完全不知道数据上下文(再次,有意):

 // pseudocode
_client.DoThis();
_client.DoThat();

此测试针对从 EF 代码优先迁移生成的测试数据库运行。我有一个空的种子方法,所以数据库是空的:

    protected override void Seed(TestAppDbContext context)
{
SqlConnection.ClearAllPools();
context.Database.Delete();
context.Database.CreateIfNotExists();
}

问题

这只是我想运行的众多测试之一。目前我必须在测试之间删除/重新创建数据库并确保 Api 测试在其他测试之后运行。因为它对数据上下文一无所知,所以我不能(或无法弄清楚如何)将所有测试代码包装在事务中以进行回滚。

我尝试过的

  • 在 TestInitialize 中新建一个事务范围并在 TestCleanup 中处理它。这没有任何作用。
  • 在此测试后运行“更新数据库”只是为了好玩 - 但尽管我调用了 ClearAllPools(),但我总是得到“无法删除数据库,因为它当前正在使用中”。这不是我想关注但认为值得一提的问题。

最佳答案

几个月前我遇到了类似的问题,但出于与您陈述的许多相同的原因,我没有想出使用 TransactionScope 的好的解决方案。

我结束了 self hosting测试项目中的 WebAPI。并使用可以在每次测试运行之前删除和重新创建(和迁移)的 SQLCE 4 数据库。这已经启动并运行了一段时间并且运行良好。

关于c# - 在 transactionScope 中使用客户端测试 WebAPI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16388595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com