Nunit Resharper ожидаемое исключение тестирования - PullRequest
2 голосов
/ 30 июня 2009

Мне очень нравится новая способность NUnit для тестирования на ожидаемое исключение, например:

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

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

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

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

Какие-нибудь предложения (кроме "преодолеть это, чувак")?

Приветствия

Ответы [ 3 ]

4 голосов
/ 02 июля 2009

Добавить поле в модульный тест и подавить предупреждение, например:

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

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

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

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

Ура, Berryl

4 голосов
/ 30 июня 2009

Вы можете написать свой собственный метод Throws, который вместо этого использует Func<object>, а затем просто написать:

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

Затем отправьте новый метод в NUnit и дождитесь следующего выпуска:)

0 голосов
/ 21 июля 2009

И это здорово, что вы можете получить исключение и работать с ним ...

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

Кроме того, он работает с Resharper, тогда как ExpectedException, похоже, не работает с NUnit 2.5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...