如果操作数不合适,我有一个操作符会抛出。 (特别是它在基于int的类上进行十进制乘法 - 如果有意义则允许(例如2 * 0.5)但如果结果不是圆数则抛出。(例如2 * 0.3))
看来我不能使用nUNit的Assert.Throws<>()来测试它,因为我能想到的每一种方式都会给我一个编译错误:
Assert.Throws<InvalidOperationException>(originalValue * badDecimalMultiplier);
Assert.Throws<InvalidOperationException>(dummy => originalValue * badDecimalMultiplier);
Assert.Throws<InvalidOperationException>(dummy => dummy = originalValue * badDecimalMultiplier);
Assert.Throws<InvalidOperationException>(() => dummy = originalValue * badDecimalMultiplier);
所以我认为我必须手动捕获异常并测试它? 那或者定义一个实际的方法来保持操作,这似乎没有那么好。
我错过了什么吗? 如果没有,我可以得到确认,以便下一个试图查看它的人有答案。
答案 0 :(得分:2)
您可以在lambda之外声明一个变量:
MyClass dummy;
Assert.Throws<InvalidOperationException>(() =>
dummy = originalValue * badDecimalMultiplier);
您也可以调用方法:
Assert.Throws<InvalidOperationException>(() =>
(originalValue * badDecimalMultiplier).ToString());
答案 1 :(得分:0)
在我写完最后一行时,我找到了解决方案:
MyIntValuedClass dummy;
Assert.Throws<InvalidOperationException>(() => dummy = originalValue * badDecimalMultiplier);
现在投掷()很高兴,因为它有一个委托。 代表很高兴,因为它没有参数。 操作很开心,因为它分配给定义的变量。
R#抱怨虚假从未被使用过,但这并不奇怪。
这不是最好的解决方案,我欢迎其他想法,但我想确保在这里有一个答案可供下一个人来看。