支持并行的c# mock框架

本文关键字:mock 框架 并行 支持 | 更新日期: 2023-09-27 18:02:19

c#中的哪些mock框架允许并行执行?(线程安全)我正在尝试RhinoMocks,但它不能很好地并行执行。这些测试没有使用外部资源。

背景:我正在帮助其他开发人员使用MSTest进行单元测试,并希望使用多个核心。

支持并行的c# mock框架

更新:

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

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

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

LastCall.IgnoreArguments();

所以,回答你的问题-我建议你尝试Moq。基于源代码,看起来Fluent API是静态的,但它被标记为[ThreadStatic],所以它应该是好的。当然,这需要注意的是,模拟的初始设置是在当前线程上进行的,而不是跨线程进行的。

让我知道这是怎么回事。


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

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

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

有几个注意事项:

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

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