2009-06-29 142 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要失敗