NUnit проверить вызов не бросает, используя беглые утверждения - PullRequest
0 голосов
/ 01 октября 2019

Я разработал метод расширения с подписью void ThrowIfAny<T>(this IEnumerable<T> e, Func<T, bool> f), и я его тестирую. По логике, одним из тестов является проверка того, что не выбрасывает. Я знаю, что могу написать это утверждение следующим образом:

Assert.DoesNotThrow(() => anEnum.ThrowIfAny(t => false));

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

Assert.That(() => anEnum.ThrowIfAny(t => false), Does.Not.Throw);

Ответы [ 2 ]

3 голосов
/ 02 октября 2019

Это должно сделать это:

Assert.That(() => anEnum.ThrowIfAny(t => false), Throws.Nothing);

См. ThrowsNothingContraint .

0 голосов
/ 01 октября 2019

Вам нужно написать расширения, которые помогут вам в этом. Я обычно пишу несколько расширений Assert, используя имя CAssert:

public static class CAssert
{
    public static void That(Action action, MyTestSuit suit)
    {
        try
        {
            action();
            if(suit.ShouldThrow)
            {
                Assert.Fail("Not thrown any exception but expected to.")
            }
        }
        catch(Exception e)
        {
            if(suit.ShouldNotThrow)
            {
                Assert.Fail("Exception was thrown but not expected.")
            }
        }
    }
}

Тестовые наборы - это в основном набор опций. В основном это синглтоны. Вы можете перегрузить его операторы так, как вам нравится, например, комбинировать опции из разных мастей:

CAssert.That(()=> 1/0, Throws.Error<DivideByZeroException>() | Throws.Error<ArithmeticException>());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...