При модульном тестировании крайне важно тщательно протестировать поведение вашего кода, включая сценарии, в которых могут возникнуть исключения. NSubstitute — это популярная платформа макетирования для.NET, предоставляющая удобный синтаксис для создания тестовых двойников и определения их поведения. В этой статье мы рассмотрим различные методы создания исключений из void-методов с помощью NSubstitute.
Метод 1: использование Throws()
Самый простой способ вызвать исключение из метода void в NSubstitute — использовать метод Throws(). Вот пример:
var mock = Substitute.For<IService>();
mock.When(x => x.VoidMethod()).Do(_ => throw new Exception("Something went wrong."));
// Usage
mock.VoidMethod(); // Throws an exception
Метод 2: использование When..Do()
Другой подход — использовать синтаксис When..Do()для указания поведения метода void. Вот пример:
var mock = Substitute.For<IService>();
mock.When(x => x.VoidMethod()).Do(_ => { throw new Exception("Something went wrong."); });
// Usage
mock.VoidMethod(); // Throws an exception
Метод 3: использование DoCallback()
NSubstitute также предоставляет метод DoCallback(), который позволяет выполнять собственный код при вызове метода. Вы можете создать исключение в действии обратного вызова. Вот пример:
var mock = Substitute.For<IService>();
mock.VoidMethod().Returns(x => { throw new Exception("Something went wrong."); });
// Usage
mock.VoidMethod(); // Throws an exception
Метод 4: использование DoNothing() с Throws()
Если вам нужно создать исключение в некоторых сценариях, позволяя методу ничего не делать в других, вы можете объединить DoNothing()и Throws(). Вот пример:
var mock = Substitute.For<IService>();
mock.When(x => x.VoidMethod()).DoNothing();
mock.When(x => x.VoidMethod()).Do(_ => throw new Exception("Something went wrong."));
// Usage
mock.VoidMethod(); // Throws an exception
В этой статье мы рассмотрели различные методы создания исключений из void-методов с использованием NSubstitute. Используя эти методы, вы можете эффективно тестировать обработку ошибок и исключительные сценарии в своем коде. Не забудьте выбрать наиболее подходящий метод с учетом ваших конкретных требований к тестированию.