Я разрабатываю приложение WPF в формате MVVM, и у меня возникла проблема, как проверить, что это исключение было выдано, когда сообщение было отправлено другой моделью представления. Я использую nUnit для модульного тестирования.
Я пытаюсь проверить, что делегат создает исключение, когда объект, отправленный через мессенджер, имеет значение null.
Пожалуйста, найдите простой код ниже
CTOR (все зависимости вводятся с использованием Autofa c)
public ManagerViewModel (IMessenger messenger)
{
messenger.Register<Person> (this, OnPersonSent)
}
Делегат
private void OnPersonSent()
{
if(Person is null) throw new ArgumentNullException();
}
Юнит-тест
Когда я пытаюсь утверждать, как показано ниже, он не улавливает исключения. Ситуация такова, что когда мессенджер отправляет сообщение, метод OnPersonSent должен генерировать исключение - но как его перехватить, используя Assert.Throws, если это утверждение перехватывает только выбросы исключения методом, переданным в лямбда-выражении (если я ошибаюсь, поправьте меня) , Тестовый пример ниже:
[SetUp]
public void SetUp()
{
messenger = new Messenger() // MVVMLight messenger
sut = new ManagerViewModel(messenger)
}
Ниже в лямбда-выражении я отправляю нулевой объект, чтобы вызвать исключение делегатом, который указан выше
[Test]
public void OnPersonSent_WhenNull_ThrowsException()
{
Assert.Throws<ArgumentNullException>(()=>messenger.Send((Person)null));
}
Большое спасибо за Ваша помощь.
PS. Конечно, этот случай упрощен, чтобы ясно показать проблему