我真的很喜欢NUnit新的(呃)测试预期异常测试的能力,即:
var ex = Assert.Throws<SomeException>(()=>methodToThrowException("blah"));
我发现的一个小问题是,为了测试某种运算符重载或其他赋值类型的功能,我知道如何执行此操作的唯一方法是给编译器一个要赋值的变量,如下所示:
// test division operator "/"
var ex = Assert.Throws<PreconditionException>(() => { var ignored = nbr / m; });
这是紧凑的,效果很好,但是Resharper发出一个警告,表示忽略的变量从未被使用过。如果您喜欢使用Resharper视觉效果来帮助您一目了然地判断代码的质量,那么这会产生相反的效果。 Resharper当然在技术上是正确的,但有没有办法告诉Resharper这是我的意图?我有很多这类测试的测试,所以一个pragma看起来很讨厌。
任何建议(除了“克服它,老兄”)?
干杯
答案 0 :(得分:4)
您可以编写自己的Throws
方法,而不是Func<object>
,然后只写:
var ex = Assert.Throws<PreconditionException>(() => nbr / m);
然后将新方法提交给NUnit并等待下一个版本:)
答案 1 :(得分:4)
在单元测试中添加一个字段并禁止警告,即:
// ReSharper disable UnaccessedField.Local
private object _ignore;
// ReSharper restore UnaccessedField.Local
将该字段用作测试委托中的赋值变量:
// test division operator "/"
var ex = Assert.Throws<PreconditionException>(() => { _ignore = nbr / m; });
这使得resharper保持安静,所以你知道它是否确实抱怨现在它可能是一个合理的投诉应该被关注。这消除了噪音水平,因此你可以集中注意力(我在一个需要重构的重要类中有超过50个这样的测试)。
干杯, Berryl
答案 2 :(得分:0)
它真的很整洁你可以得到异常并使用它......
var exception = Assert.Throws<ArgumentException>(() => dlinvalid.ProcessData());
Assert.That(exception.Message, Is.EqualTo("foo bar"), "Expected bar foo");
另外它与Resharper一起使用,而ExpectedException
似乎与NUnit 2.5失败