具有并行支持的C#Mocking框架

具有并行支持的C#Mocking框架,c#,unit-testing,mocking,parallel-processing,C#,Unit Testing,Mocking,Parallel Processing,C#中的哪些模拟框架允许并行执行?(线程安全)我尝试了Rhinomock,但它不能很好地与并行执行配合使用。这些测试不使用外部资源 背景:我正在帮助其他开发人员使用MSTest进行单元测试,并希望使用多核。该部件似乎运行正常。更新: 好的,我最初发布了下面的大纲,因为我相信它可能是您测试中的某个东西,比如共享状态——它不可能是Rhinomock,对吧?正确的??嗯,就你的观点而言,我认为这个框架有些奇怪。我真诚的道歉 使用Reflector随意查看RhinoMock源代码,我们可以看到MockR

C#中的哪些模拟框架允许并行执行?(线程安全)我尝试了Rhinomock,但它不能很好地与并行执行配合使用。这些测试不使用外部资源


背景:我正在帮助其他开发人员使用MSTest进行单元测试,并希望使用多核。该部件似乎运行正常。

更新:

好的,我最初发布了下面的大纲,因为我相信它可能是您测试中的某个东西,比如共享状态——它不可能是Rhinomock,对吧?正确的??嗯,就你的观点而言,我认为这个框架有些奇怪。我真诚的道歉

使用Reflector随意查看RhinoMock源代码,我们可以看到MockRepository有一个内部静态字段来表示当前的模拟存储库。从这个字段的用法来看,动态代理拦截器似乎广泛使用了这个存储库,这强烈表明没有任何东西是线程安全的

下面是一个使用该静态字段的示例用法

LastCall.IgnoreArguments();
因此,为了回答您的问题,我建议您尝试最低起订量,看起来Fluent API是静态的,但是它用[ThreadStatic]标记,所以应该可以。当然,这附带了一个警告,即您在当前线程上进行模拟的初始设置,而不是跨线程

让我知道这是怎么回事


如何在Visual Studio 2010中设置并行测试执行:

这概述了启用并行测试执行的机制。简而言之,您需要手动编辑testsettings文件,并将parallelTestCount属性添加到执行节点。将parallelTestCount设置为0意味着它将自动平衡机器上可用内核之间的测试执行

<TestSettings>
   <!-- etc -->
   <Execution parallelTestCount="0">
         <!-- etc -->
   </Execution>
   <!-- etc -->
</TestSettings>

有几点需要注意:

  • 它只适用于标准的MSTest“单元测试”(您可以创建各种不同的测试(有序的、编码的ui、自定义测试扩展等)。标准单元测试是TestClass/TestMethod
  • 它不支持数据适配器,因此不支持并行数据库驱动的测试
  • 它必须在本地运行。(不能并行运行分布在多台计算机上的测试。)

最后,这是最重要的一点--您有责任确保您的测试是线程安全的。这意味着如果您使用任何类型的静态单例或共享状态,您将遇到问题。

您想在多个核上并行运行测试,还是在一个测试用例中运行多个线程?我想并行运行测试在多核上。我在Xunit 2.1.0中使用RhinoMocks 3.6.1,在并行运行测试时出错。我将RhinoMocks更新为4.0.0-alpha3版本,并且在并行运行测试时不再收到错误。谢谢,但您没有回答我的问题。我问的是模拟框架,而不是MSTest。这部分已经起作用了。Tha谢谢你的更新。我用Moq测试过,它确实有效。