我觉得我可能会做一些完全错误的事情,所以如果你有其他方法,请告诉我。
我正在使用服务堆栈构建服务。我正在使用 Xunit 和 NCrunch 测试该服务。我希望我的测试能够并行运行,而且它们目前确实要感谢 NCrunch……但是,有一个问题。
我所有的测试都依赖于我的服务已经启动并运行的事实——它是一个共享资源……一个依赖项。我并不特别关心它,但似乎服务堆栈不允许您为每个测试启动多个实例(另外,我需要在 postgresql 中做一些讨厌的表前缀或其他东西 - blek)......
我所需要的只是在任何测试运行之前通过代码启动我的服务 - 并在所有测试完成后停止它。我需要它通过代码,因为如果我必须手动启动服务,我不会收到有关服务器端代码的代码覆盖率信息。
我可以手动启动该服务,并且我的所有测试都并行运行并完美通过 - 但问题是我似乎无法为“预测试”和“后测试”操作找到一个好的钩子。
我已经研究过使用信号量作为一种“引用计数”解决方案,但它实际上与我需要的相反。我不想提前指定将运行多少测试。我需要类似于 dijkstra 计数信号量的东西 - 但我还没有找到基于命名(系统范围)信号量的实现.
Mutex 不起作用——因为碰巧启动服务的测试在停止服务之前仍然必须知道所有其他测试何时完成——它不能只在 Dispose 方法中这样做。
许多与线程之间同步对象相关的正常解决方案不适用于这种情况,因为测试是在它们自己的 AppDomain 中运行的。
感谢您提前提供的所有帮助。