gpt4 book ai didi

c# - 在集成测试 Web API 时使用 TransactionScope

转载 作者:太空狗 更新时间:2023-10-29 19:48:01 24 4
gpt4 key购买 nike

此刻,我正在做类似于 this 的事情集成测试与我们的 API Controller 通信的库,到目前为止一切顺利,但我遇到了障碍。在我们所有其他的集成测试中,我们在隔离级别 ReadCommitted 的 MSDTC 事务中运行测试,这样每个测试都有自己的与数据库等的小的私有(private) session ,并且在每次测试结束时,事务被回滚。 ..但这对这些测试不起作用,因为事务是按线程进行的,并且所有 HttpClient/HttpServer 方法都是异步的,因此工作是在与主线程不同的线程上完成的该测试没有要订阅的环境事务,直接进行并提交。

我看过一些关于如何在一个线程上打开 TransactionScope 然后创建一个依赖事务以通过闭包传递给新任务的帖子,但我不知道如何将其应用于 HttpClient连接到内存中的 HttpServer。我怀疑我只是没有以正确的方式思考它,但这就是我必须继续的全部。

什么有意义/工作/等等?我可以完全控制将连接到它的 HttpServer 和 HttpClient 的创建,但我不知道如何处理它们。

更新:

已经取得了一些进展 - 我编写了一个消息处理程序,可以在工作线程上创建一个依赖事务 if Transaction.Current 在到达那里时被填充,并且对于我的一些调用它是,但对于其他人来说不是,我想知道我是否可能在追逐阴影——比如,周围有很多 ContinueWith,我认为它是在调用线程(自然会有事务)上执行的,如果前提是任务已经完成。

是否可以只同步运行整个过程并一直执行测试线程?我已经用 ContinueWith'ing 同步进行了一些实验,但没有取得太大成功。

最佳答案

如果您不坚决使用真正的 HTTP 连接,您可以直接通过代码(通过使用程序集引用)从允许您执行每个 session 或每个测试开始的测试框架中调用接口(interface)- 启动和关闭工作(例如 MSTest 的类和测试初始化​​函数)。在这种情况下,您将在成员变量中打开跨类共享的 TransactionScope,并将其放置在类中或测试关闭函数。因为您没有调用 .Commit(),它会回滚事务期间发生的操作。

关于c# - 在集成测试 Web API 时使用 TransactionScope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14169440/

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