当前位置: 首页 > 编程语言 > C#

MOQ-抛出validationexception分享

时间:2023-04-10 15:13:54 C#

MOQ-抛出validationexception我使用MOQ框架进行测试。我有一个场景,我希望抛出一个错误异常。我如何验证它是否被抛出?publicvoidKoko(Listlist){foreach(string?strinlist){if(str!=null)someProperty.富(海峡);否则抛出新的FormatException();}}提前致谢。如果您想验证异常是否被抛出(通过您自己的代码),那么Moq不是您的首选工具。只需使用其中一个单元测试框架。xUnit/NUnit:Assert.Throws(()=>foo.Bar());流畅的断言:Actionact=()=>foo.Bar();行动.ShouldThrow();http://fluentassertions.codeplex.com/documentationhttp://www.nunit.org/index.php?p=exceptionAsserts&r=2.6.2我可能误读了你的意图,但据我所知没有必要对模拟做任何事情以测试抛出的异常。看起来你有一个带有方法Foo的类,它接受一个字符串-让我们调用这个InnerClass具有成员Koko的属性类(someProperty),该成员将List作为参数publicclassOuterClass{privatereadonlyInnerClasssomeProperty;publicOuterClass(InnerClasssomeProperty){this.someProperty=someProperty;}publicvoidKoko(Listlist){foreach(varstrinlist){if(str!=null)someProperty.Foo(str);否则抛出新的FormatException();注意:我无法编译List-告诉我基础类型(String)必须是不可空的。AFAIK,只有值类型需要设为可为空,引用类型隐式可为空。看起来您想测试一下,如果您传入一个字符串列表并且其中任何一个为空,则抛出FormatException。如果是这样,那么MOQ的唯一原因就是让我们不用担心InnerClass函数。Foo是一种方法,因此除非我们使用严格的模拟,否则我们可以创建一个没有其他设置的InnerClass模拟。有一个属性[ExpectedException]可以用来标记我们的测试以验证是否抛出了异常。[TestMethod][ExpectedException(typeof(FormatException))]publicvoidExceptionThrown(){varlist=newList(){"Abel","Baker",null,"Charlie"};varouter=newOuterClass(newMock().Object);outer.Koko(列表);如果抛出FormatException,此测试将通过,否则将失败。您可以使用NUnitAsserts测试抛出异常:Assert.That(()=>testObject.methodToTest(),Throws.TypeOf());请阅读此最小起订量介绍。以下是调用DoSomething方法时设置InvalidOperationException的方法:mock.Setup(foo=>foo.DoSomething()).Throws();然后只需验证该方法已被调用。如果它被调用,抛出异常mock.Verify(foo=>foo.DoSomething());一个老问题,但没有源代码实际显示解决方案是什么,所以这就是我所做的:varcorrectExceptionThrown=false;尝试{_myClass.DoSomething(x);}catch(Exceptionex){if(ex.Message=="Expectedmessage")correctExceptionThrown=true;}Assert.IsTrue(correctExceptionThrown);请注意,您可以捕获特定类型的异常而不是检查消息(通常更可取)。好的,我通过以下方式解决了它。我将方法调用放在try-catch内的Because块中,因为异常中断了我的测试。然后我可以使用简单的身份验证。感谢所有帮助者...通过阅读这些答案,我意识到还有另一种使用NUnit来完成此操作的方法。以下从异常中获取异常文本并验证错误消息文本。varex=Assert.Throws(()=>foo.Bar());Assert.That(ex.Message,Is.EqualTo("Expectedexceptiontext");我无法让装饰器/属性语法与最新版本的NUnit一起使用(AlanT上面的回答)-不知道为什么,但没有无论我尝试做什么,它都会抱怨。以上就是C#学习教程的全部内容:MOQ-validationexceptionisthrown,如果对大家有用,需要了解更多关于C#学习教程,希望大家多多付出关注,本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除,如需转载请注明出处: