servicestack,xunit,C#,servicestack,Xunit" /> servicestack,xunit,C#,servicestack,Xunit" />

C# 跨AppDomains实现引用计数的最佳方法是什么?

C# 跨AppDomains实现引用计数的最佳方法是什么?,c#,servicestack,xunit,C#,servicestack,Xunit,我觉得我可能在做一些完全错误的事情,所以如果你有其他方法,请让我知道 我正在用服务堆栈构建一个服务。我正在用Xunit和NCrunch测试该服务。我希望我的测试能够并行运行,这要感谢NCrunch。。。然而,有一个问题 我所有的测试都依赖于这样一个事实:我的服务已经启动并正在运行——它是一个共享资源。。依赖关系。我并不特别关心它,但服务堆栈似乎不允许您为每个测试启动多个实例(另外,我还需要在postgresql-blek中执行一些讨厌的表前缀或其他操作) 我所需要的只是在任何测试运行之前通过代码

我觉得我可能在做一些完全错误的事情,所以如果你有其他方法,请让我知道

我正在用服务堆栈构建一个服务。我正在用Xunit和NCrunch测试该服务。我希望我的测试能够并行运行,这要感谢NCrunch。。。然而,有一个问题

我所有的测试都依赖于这样一个事实:我的服务已经启动并正在运行——它是一个共享资源。。依赖关系。我并不特别关心它,但服务堆栈似乎不允许您为每个测试启动多个实例(另外,我还需要在postgresql-blek中执行一些讨厌的表前缀或其他操作)

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

我可以手动启动服务,我的所有测试并行运行,并且通过得很好——但问题是我似乎找不到一个好的钩子来执行“预测试”和“后测试”操作

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

互斥锁不起作用-因为启动服务的测试在停止服务之前仍然必须知道所有其他测试何时完成-它不能只在Dispose方法中这样做

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


提前感谢您的帮助。

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


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

我知道如何使用Python的单元测试框架:将所有单元测试放在一个测试组中,并在组本身上添加一个before/after钩子。@三段论这些测试是用于服务的单元测试吗?或者它们应该是整个系统的集成测试?@三段论,也许你可以再详细一点。我最近实现了服务堆栈,在这里我需要多个实例,并且能够随意“加速”和“减速”服务。最后,我将每个web服务封装在自己的应用程序域中,这为任意启动和停止它们创造了奇迹。@MikeC这些都是集成测试。从客户的角度来看,你看到了吗?我认为单元测试框架将有一个全局启动/停止方法供您使用,但看起来xUnit在2.0之前不支持这种方法。谢谢您,我打算在几个小时内尝试一下。一旦我确认这是我要找的,我就会给你+50=)@你的答案正是我想要的,但即使在按照你的建议使用EventWaitHandle实现同步后,我也会看到随机失败,因为在所有测试完成后,我无法正确关闭句柄(因为我在那里也没有钩子)。我相信我需要等待上面提到的Xunit 2.0,或者在开始测试之前手动运行我的服务。给你+50,让我知道最有可能成功。你实现了我讨论的引用计数机制吗?我没有显示使用映射内存文件共享的代码博客文章中的appdomains/进程之间的单个整数,但我有一个如何实现的示例。您知道测试何时完成,对吗?当引用计数器达到零时,您关闭句柄(并终止服务)。