C# 测试*运算符*是否引发异常的最佳方法
我有一个运算符,如果操作数不合适,它将抛出。(特别是在基于int的类上执行十进制乘法-如果有意义(例如2*0.5),则允许使用十进制乘法,但如果结果不是整数,则抛出十进制乘法。(例如2*0.3)) 似乎我不能使用nUNit的Assert.Throws()来测试这个,因为我所能想到的调用它的每一种方法都会给我一个编译器错误:C# 测试*运算符*是否引发异常的最佳方法,c#,nunit,C#,Nunit,我有一个运算符,如果操作数不合适,它将抛出。(特别是在基于int的类上执行十进制乘法-如果有意义(例如2*0.5),则允许使用十进制乘法,但如果结果不是整数,则抛出十进制乘法。(例如2*0.3)) 似乎我不能使用nUNit的Assert.Throws()来测试这个,因为我所能想到的调用它的每一种方法都会给我一个编译器错误: Assert.Throws<InvalidOperationException>(originalValue * badDecimalMultiplier); A
Assert.Throws<InvalidOperationException>(originalValue * badDecimalMultiplier);
Assert.Throws<InvalidOperationException>(dummy => originalValue * badDecimalMultiplier);
Assert.Throws<InvalidOperationException>(dummy => dummy = originalValue * badDecimalMultiplier);
Assert.Throws<InvalidOperationException>(() => dummy = originalValue * badDecimalMultiplier);
Assert.Throws(originalValue*baddecimal乘数);
抛出(dummy=>originalValue*baddecimal乘数);
抛出(dummy=>dummy=originalValue*baddecimal乘数);
抛出(()=>dummy=originalValue*baddecimal乘数);
- 第一个函数尝试将操作结果作为参数传递给Throws(),但失败了,因为Throws只接受TestDelegate
- 第二个失败,出现“只能将赋值、调用、递增、递减和新对象表达式用作语句”错误
- 第三个失败,原因是“委托'NUnit.Framework.TestDelegate'不接受1个参数”
- 第四个(以及我能找到的所有变体)不允许您分配给未声明的变量(这并不奇怪)
如果没有,我是否可以得到确认,以便下一个尝试查找此项的人有一个答案。您可以在lambda之外声明一个变量:
MyClass dummy;
Assert.Throws<InvalidOperationException>(() =>
dummy = originalValue * badDecimalMultiplier);
MyClass虚拟;
Assert.Throws(()=>
虚拟=原始值*badDecimalMultiplier);
您也可以只调用一个方法:
Assert.Throws<InvalidOperationException>(() =>
(originalValue * badDecimalMultiplier).ToString());
Assert.Throws(()=>
(原始值*badDecimalMultiplier).ToString());
在我写最后一行时,我找到了解决方案:
MyIntValuedClass dummy;
Assert.Throws<InvalidOperationException>(() => dummy = originalValue * badDecimalMultiplier);
MyIntValuedClass虚拟;
抛出(()=>dummy=originalValue*baddecimal乘数);
现在Throws()很高兴,因为它有一个委托。
代理很高兴,因为它没有参数。
操作是愉快的,因为它正在分配给一个已定义的变量
R#抱怨假人从未被使用过,但这并不奇怪
这不是最好的解决方案,我也欢迎其他想法,但我想确保这里有一个答案供下一个人来寻找。我很震惊。。我不敢相信有人能读到我的问题,找出答案,然后把它打出来,而我还没来得及把我在发帖前找到的答案打出来。我对这个社区感到敬畏