c# - 跨 AppDomain 实现引用计数的最佳方式是什么?

标签 c# servicestack xunit

我觉得我可能会做一些完全错误的事情,所以如果您有其他方法,请告诉我。

我正在使用服务堆栈构建服务。我正在使用 Xunit 和 NCrunch 测试该服务。我希望我的测试能够并行运行,目前得益于 NCrunch,它们可以做到这一点……但是,有一个问题。

我的所有测试都依赖于我的服务已启动并正在运行这一事实 - 它是共享资源.. 依赖项。我不是特别关心它,但似乎服务堆栈不允许你为每个测试启动多个实例(另外,我需要做一些讨厌的表前缀或 postgresql 中的东西 - blek)...

我所需要的只是在任何测试运行之前通过代码启动我的服务的某种方式 - 并在所有测试完成后停止它。我需要它通过代码,因为如果我必须手动启动服务,我不会收到有关服务器端代码的代码覆盖率信息。

我可以手动启动该服务,我的所有测试都并行运行并完美通过 - 但问题是我似乎无法找到一个好的钩子(Hook)来执行“预测试”和“后测试”操作.

我研究过使用信号量作为一种“引用计数”解决方案,但它实际上与我需要的相反。我不想提前指定将运行多少测试。我需要类似于 dijkstra 计数信号量的东西 - 但我还没有找到基于命名(系统范围)信号量的实现.

Mutex 不会工作 - 因为碰巧启动服务的测试仍然必须知道所有其他测试何时在停止服务之前完成 - 它不能只在 Dispose 方法中这样做。

许多与线程间对象同步相关的常规解决方案不适用于这种情况,因为测试是在它们自己的 AppDomain 中运行的。

提前感谢您的所有帮助。

最佳答案

几年前,我写了一篇关于解决类似问题的博客文章。

http://netvignettes.wordpress.com/2012/01/03/sharepoint-net-3-5-woes-and-synchronization-between-processes/

向下滚动到代码块并开始阅读那里的内容,这样您就可以跳过顶部的 SharePoint 内容。

关于c# - 跨 AppDomain 实现引用计数的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17001735/

相关文章:

.net - 将 ServiceStack 项目从 mono 迁移到 .NET Core/Standard

c# - 如何使用 ServiceStack 客户端使用文件

servicestack - 使用 ServiceStack 的自定义服务 Hook

c# - 按月生成 Crystal 报表?

c# - C# 中具有固定大小数组的连续分层结构内存?

c# - 从生产代码中查找修订信息,允许链接到源代码

c# - 为什么重新启动进程时不再收到 OutputDataReceived 事件?

docker - 在 docker 容器中运行时找不到 xUnit 测试

teamcity - 如何从命令行运行的 Jetbrains dotCover 覆盖率报告中排除 xunit 测试程序集

c# - 使用 dotnet core 1.1 和 xunit 单元测试显示输出?