2009-06-29 94 views
2

我真正爱的NUnit的测试对于预期异常测试新(ER)的能力,即:NUnit的ReSharper的预期异常测试

var ex = Assert.Throws<SomeException>(()=>methodToThrowException("blah")); 

一个小问题,我觉得是要测试某种运算符重载或其他分配类型的功能,我可以知道如何做到这一点的唯一方法是通过给编译器的变量分配到,像这样:

// test division operator "/" 
var ex = Assert.Throws<PreconditionException>(() => { var ignored = nbr/m; }); 

这是小巧的伟大工程,但有烦恼,其中ReSharper的提出了警告忽略的变量从不使用。如果您喜欢使用Resharper视觉效果来帮助您一眼就判断代码的质量,那么这种方法就会产生反效果。当然,Resharper在技术上是正确的,但是有没有办法告诉Resharper这是我的意图?我有很多这类测试的测试,所以一个杂注看起来很讨厌。

任何建议(除了“克服它,伙计”)?

干杯

回答

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

4

你可以写你自己的Throws方法,这需要Func<object>代替,然后只写:

var ex = Assert.Throws<PreconditionException>(() => nbr/m); 

然后提交新方法NUnit的,等待下一个版本:)

0

,这真的整洁,你可以得到异常和使用它......

var exception = Assert.Throws<ArgumentException>(() => dlinvalid.ProcessData()); 
Assert.That(exception.Message, Is.EqualTo("foo bar"), "Expected bar foo"); 

再加上它的工作原理与ReSharper的,而ExpectedException似乎与NUnit的2.5要失败