2009-06-29 1 views
2

я действительно люблю новую (вдовцы) способность NUnit для тестирования ожидаемого тестирования исключений, то есть:NUnit ReSharper ожидается тестирование исключения

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

Одна небольшая проблема я считаю, что для проверки какого-то перегрузка оператора или другого присваивания функциональность типа, единственный способ, которым я могу знать, как сделать это, давая компилятор переменную для назначения, например, так:

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

Это компактное и отлично работает, но имеет досаду, где 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