Nunit Resharper ожидается тестирование исключений

2

Я действительно люблю способность NUnit new (er) тестировать ожидаемое тестирование исключений, т.е.

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

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

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

Это компактно и отлично работает, но раздражает, когда Resharper выдает предупреждение о том, что игнорируемая переменная никогда не используется. Это счетчик результативности, если вы хотите использовать визуализацию Resharper, чтобы помочь вам оценить качество кода с первого взгляда, как и я. Разумеется, решармер технически корректен, но есть ли способ сказать Решарперу, что это мое намерение? У меня есть тест с множеством подобных тестов, поэтому прагма будет выглядеть противно.

Любые предложения (кроме того, "справитесь с этим, чувак" )?

Приветствия

Теги:
exception
nunit
resharper

3 ответа

4
Лучший ответ

Добавьте поле в unit test и подавите предупреждение, то есть:

// ReSharper disable UnaccessedField.Local
        private object _ignore;
// ReSharper restore UnaccessedField.Local

Использование этого поля в качестве переменной назначения в тестовом делетете:

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

Это держит решара тихим, поэтому вы знаете, что он жалуется на что-то сейчас, скорее всего, это законная жалоба, на которую следует обратить внимание. Это устраняет уровень шума, поэтому вы можете сфокусироваться (у меня более 50 тестов, подобных этому в важном классе, который нуждается в некотором рефакторинге).

Cheers, 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню