草庐IT

c# - nunit 如何成功等待 async void 方法完成?

在C#中使用async/await时,一般规则是避免使用asyncvoid,因为这几乎是一劳永逸,而不是一个任务。说得通。奇怪的是,本周早些时候我正在为我编写的一些async方法编写一些单元测试,并注意到NUnit建议将async测试标记为void或返回Task。然后我尝试了一下,果然,它起作用了。这看起来真的很奇怪,因为nunit框架如何能够运行该方法并等待所有异步操作完成?如果它返回Task,它可以等待任务,然后做它需要做的事情,但是如果它返回void,它如何完成它呢?于是我破解了源码,找到了。我可以在一个小样本中重现它,但我根本无法理解他们在做什么。我想我不太了解Synchron

c# - 单元测试 HttpContext.Current.Cache 或 C# 中的其他服务器端方法?

为使用HttpContext.Current.Cacheclass的类创建单元测试时,我在使用NUnit时出错。功能是基本的-检查一个项目是否在缓存中,如果不在,则创建它并将其放入:if(HttpContext.Current.Cache["Some_Key"]==null){myObject=newObject();HttpContext.Current.Cache.Insert("Some_Key",myObject);}else{myObject=HttpContext.Current.Cache.Get("Some_Key");}从单元测试中调用它时,遇到第一个Cache行时会

c# - 单元测试 HttpContext.Current.Cache 或 C# 中的其他服务器端方法?

为使用HttpContext.Current.Cacheclass的类创建单元测试时,我在使用NUnit时出错。功能是基本的-检查一个项目是否在缓存中,如果不在,则创建它并将其放入:if(HttpContext.Current.Cache["Some_Key"]==null){myObject=newObject();HttpContext.Current.Cache.Insert("Some_Key",myObject);}else{myObject=HttpContext.Current.Cache.Get("Some_Key");}从单元测试中调用它时,遇到第一个Cache行时会

c# - monodevelop中 "Run Tests"在哪里

我有一个解决方案已经包含一个带有NUnit测试的库。当我使用VisualStudio进行开发时,我通常使用包含在我项目的tools\nunit文件夹中的nunit.exe二进制文件运行这些测试。我现在正在使用monodevelop开发相同的解决方案。我很确定我记得在monodevelop中有一个集成的“运行测试”操作,我想用它来运行测试。根据thisarticle应该有一个“查看-单元测试”菜单项。但是,我一定是做错了什么/特别的,因为我找不到它。如何使用Monodevelop运行我的NUnit测试? 最佳答案 试试这个:sudoa

c# - monodevelop中 "Run Tests"在哪里

我有一个解决方案已经包含一个带有NUnit测试的库。当我使用VisualStudio进行开发时,我通常使用包含在我项目的tools\nunit文件夹中的nunit.exe二进制文件运行这些测试。我现在正在使用monodevelop开发相同的解决方案。我很确定我记得在monodevelop中有一个集成的“运行测试”操作,我想用它来运行测试。根据thisarticle应该有一个“查看-单元测试”菜单项。但是,我一定是做错了什么/特别的,因为我找不到它。如何使用Monodevelop运行我的NUnit测试? 最佳答案 试试这个:sudoa

c# - 将现有代码移动到测试驱动开发

最近发现了这种开发方法,我发现它是一种相当不错的方法。所以,对于我的第一个项目,我有一个小的DLL代码(在C#.NET中,它的值(value)),我想为这段代码做一组测试,但我有点迷失了如何和从哪里开始。我正在使用NUnit和VS2008,如果有任何关于从什么类型的类开始、为什么编写测试的提示,以及关于通常如何将代码移动到基于测试的开发的任何提示,我们将不胜感激. 最佳答案 看书WorkingEffectivelywithLegacyCode迈克尔·费瑟斯(MichaelFeathers)。总而言之,将现有代码重构为可测试和经过测试

c# - 将现有代码移动到测试驱动开发

最近发现了这种开发方法,我发现它是一种相当不错的方法。所以,对于我的第一个项目,我有一个小的DLL代码(在C#.NET中,它的值(value)),我想为这段代码做一组测试,但我有点迷失了如何和从哪里开始。我正在使用NUnit和VS2008,如果有任何关于从什么类型的类开始、为什么编写测试的提示,以及关于通常如何将代码移动到基于测试的开发的任何提示,我们将不胜感激. 最佳答案 看书WorkingEffectivelywithLegacyCode迈克尔·费瑟斯(MichaelFeathers)。总而言之,将现有代码重构为可测试和经过测试

c# - 最小起订量:设置一个模拟方法以在第一次调用时失败,在第二次调用时成功

使用Moq模拟第一次调用会抛出异常,然后第二次调用成功的方法的最简洁方法是什么? 最佳答案 我会利用Callback并增加一个计数器来确定是否从Callback中抛出异常。[Test]publicvoidTestMe(){varcount=0;varmock=newMock();mock.Setup(a=>a.MyMethod()).Callback(()=>{count++;if(count==1)thrownewApplicationException();});Assert.Throws(typeof(ApplicationE

c# - 最小起订量:设置一个模拟方法以在第一次调用时失败,在第二次调用时成功

使用Moq模拟第一次调用会抛出异常,然后第二次调用成功的方法的最简洁方法是什么? 最佳答案 我会利用Callback并增加一个计数器来确定是否从Callback中抛出异常。[Test]publicvoidTestMe(){varcount=0;varmock=newMock();mock.Setup(a=>a.MyMethod()).Callback(()=>{count++;if(count==1)thrownewApplicationException();});Assert.Throws(typeof(ApplicationE

c# - 使用 nunit 测试事件

我刚刚开始使用TDD,可以自行解决我遇到的大部分问题。但现在我迷路了:如何检查事件是否被触发?我一直在寻找类似Assert.Raise或Assert.Fire的东西,但什么也没有。Google不是很有用,大多数点击都是建议,例如foo.myEvent+=newEventHandler(bar);Assert.NotNull(foo.myEvent);但这证明不了什么。谢谢! 最佳答案 可以通过订阅该事件并设置一个bool值来检查事件是否被触发:varwasCalled=false;foo.NyEvent+=(o,e)=>wasCal