我安装了最新的 NUnit(3.2.0),并且所有测试都并行运行。它可能看起来像是理想的行为,但我并没有要求它,实际上它破坏了我的一些测试。我在 [OneTimeSetUp] 中进行了一些依赖于线程的初始化,似乎我无法做任何事情来强制 NUnit 按顺序运行我的测试。我读过 documentation它指出默认情况下测试不是并行运行的,但实际上它们是!
此外,我尝试添加以下属性:[assembly: Parallelizable(ParallelScope.None)] — 没有成功。
有人知道如何改变这种行为吗?
附言我使用 ReSharper 运行它,但也尝试使用 MSVS 插件。
UPD:我正在使用 MVVM Light DispatcherHelper.Initialize()(在[OneTimeSetUp] 内)来存储调度程序对象,它是后来被几个测试使用。如果线程不同(在测试和设置方法之间),则被测操作将异步执行,我的测试将失败。
我在不同的测试中检查了线程 ID,它们都是不同的。
UPD2:文档摘录:
The NUnit 3.0 framework can run tests in parallel within an assembly. This is a completely separate facility from Engine Parallel Test Execution, although it is possible to use both in the same test run.
By default, no parallel execution takes place. Attributes are used to indicate which tests may run in parallel and how they relate to other tests.
如果这并不意味着程序集内的测试在明确指定之前不应并行运行,那么它是什么意思?为什么 [assembly: Parallelizable(ParallelScope.None)] 对测试并行执行没有影响?
UPD3:
问题的答案可能在下面找到,但如果您(像我一样)被 DispatcherHelper.Initialize() 困住了,您只需要从 OneTimeSetUp 中删除此初始化并在每个使用调度程序的测试中添加以下行:
DispatcherHelper.Reset();
DispatcherHelper.Initialize();
最佳答案
NUnit 不保证您的所有测试都将在同一线程上运行,因此观察到您的测试在不同线程上运行并不意味着它们是并行运行的。
文档仅说明测试将按顺序或并行运行。您可能会认为这意味着它们在同一线程上运行,但内部实现可能需要测试在不同线程上运行的原因有很多。超时是一个例子,如果测试超时,我们会产生一个线程并杀死它,但还有很多其他例子。
并行测试运行是 NUnit 3 的新功能,因此内部实现从 NUnit 2 更改。强制线程内的所有测试在同一线程上运行的属性可能很有用,因此请随时提交 enhancement request .
抱歉,我不熟悉 MVVM Light,所以我无法建议编码回 OneTimeSetup 线程的方法。
更新 - 由于这是 web 和异步的常见用法,NUnit 团队决定提供一个属性,要求测试在与 fixture 的 OneTimeSetup<>。这将出现在下一个版本 3.4 或修补程序 3.2.1 版本中。如果您想跟踪进度,请参阅 issue和 pull request .
更新 2 - 您现在可以将 SingleThreadedAttribute 添加到 TestFixture 以向运行器指示 OneTimeSetUp、OneTimeTearDown 和所有子测试必须在同一个线程上运行。
关于c# - NUnit 3 : Forbid tests to run in parallel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35983016/
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我如何做Ruby方法"Flatten"RubyMethod在C#中。此方法将锯齿状数组展平为一维数组。例如:s=[1,2,3]#=>[1,2,3]t=[4,5,6,[7,8]]#=>[4,5,6,[7,8]]a=[s,t,9,10]#=>[[1,2,3],[4,5,6,[7,8]],9,10]a.flatten#=>[1,2,3,4,5,6,7,8,9,10 最佳答案 递归解决方案:IEnumerableFlatten(IEnumerablearray){foreach(variteminarray){if(itemisIEnume
我最近从C#转向了Ruby,我发现自己无法制作可折叠的标记代码区域。我只是想到做这种事情应该没问题:classExamplebegin#agroupofmethodsdefmethod1..enddefmethod2..endenddefmethod3..endend...但是这样做真的可以吗?method1和method2最终与method3是同一种东西吗?还是有一些我还没有见过的用于执行此操作的Ruby惯用语? 最佳答案 正如其他人所说,这不会改变方法定义。但是,如果要标记方法组,为什么不使用Ruby语义来标记它们呢?您可以使用
什么是Linq聚合方法的ruby等价物。它的工作原理是这样的varfactorial=new[]{1,2,3,4,5}.Aggregate((acc,i)=>acc*i);每次将数组序列中的值传递给lambda时,变量acc都会累积。 最佳答案 这在数学以及几乎所有编程语言中通常称为折叠。它是更普遍的变形概念的一个实例。Ruby从Smalltalk中继承了这个特性的名称,它被称为inject:into:(像aCollectioninject:aStartValueinto:aBlock一样使用。)所以,在Ruby中,它称为inj
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion几年前我去学校学习编程,毕业后我找到了一份系统管理方面的工作,这就是我职业生涯的方向。我想重新开始某种开发,并且一直在“玩”C#和ASP.NET,但我已经听到很多关于其他"new"语言的讨论(新的意思是它们是新的)我)喜欢Ruby和F#。我想我想知道我是否在浪费时间学习主要的MS语言,而不是成为一名通才。很长一段时间没有离开开发社区(如果我曾经离开过的话)让我在潮流中挣扎,我不想落在时代的
我有一个简单的Ruby脚本,我用它在某些HTTPheader上执行private_encrypt以签署要发送到rubyRESTAPI的Web请求,该API会根据Base64编码字符串测试Base64编码字符串生成而不是解码Base64和解密数据然后测试原始字符串。我使用的脚本是require"openssl"require"base64"path_to_cert=ARGV[0].dupplain_text=Base64.decode64(ARGV[1].dup)private_key=OpenSSL::PKey::RSA.new(File.read(path_to_cert))pu
我是ruby开发的新手,我目前正在使用rails2.3.11在ruby1.8.7中开发一个项目,我想知道这种语言是否有与C#的linq等效的集合操作,例如where子句。谢谢。 最佳答案 Ruby中Linq的where等价于find_all检查documentationfortheEnumerableModule用于其他功能。 关于C#的LINQ用于在ruby中等效的集合操作,我们在StackOverflow上找到一个类似的问题: https://
我正在尝试转换Ruby的time到C#,但我现在卡住了。这是我的尝试:publicstaticclassExtensions{publicstaticvoidTimes(thisInt32times,WhatGoesHere?){for(inti=0;i我是C#的新手,也许这个应该很简单,而且我知道我想使用Extensionmethods。但由于函数在C#中不是“第一类”,我现在被卡住了。那么,我应该为WhatGoesHere使用什么参数类型? 最佳答案 您可以使用Action输入:publicstaticclassExtensio