Метод, генерирующий исключение NullReferenceException при возникновении события в модульном тесте
Я тестирую контроллер с помощью Moq и получаю исключение NullReferenceException, когда метод, который я тестирую, вызывает событие. Есть идеи, как это решить?
Вот тестовый код:
//Arrange
mockNumeriseur.Setup(x => x.InitialiserNumerisation());
mockCommande.Setup(x => x.ConnaitreStatut()).Returns(numerisationReussie);
mockNumeriseur.Setup(x => x.Numeriser(false, It.IsAny<string>(), It.IsAny<IntPtr>()));
//Act
controleur.Numeriser(new IntPtr(), false, false, false);
//Assert
mockNumeriseur.Verify(x => x.InitialiserNumerisation(), Times.Once());
mockCommande.Verify(x => x.ConnaitreStatut(), Times.Once());
mockNumeriseur.Verify(x => x.Numeriser(false, It.IsAny<string>(), It.IsAny<IntPtr>()), Times.Once());
Вот строка, которая вызывает проблему:
ActiverBoutonsNumerisationUniqueEvent(this, new BooleanEventArgs(false));
BooleanEventArgs расширяет EventArgs, позволяя передавать логическое значение EventHandler.
Изменить: я знаю, что такое NullReferenceException, что я пытаюсь выяснить, почему мои модульные тесты вызывают один, когда это событие запускается. Я думаю, что это может иметь какое-то отношение к Unity/Moq, но я новичок в этих библиотеках, поэтому не знаю, с чего начать.
1 ответ
Спасибо Антону Павлову за решение, я решил опубликовать его здесь, чтобы было легче, если у кого-то есть такая же проблема.
Использование null-распространения решает проблему. По сути, он проверяет, имеет ли значение ActiverBoutonsNumerisationUniqueEvent значение NULL, прежде чем инициировать событие. Если это ноль, это не вызывает это. Что идеально подходит для моих тестов.
ActiverBoutonsNumerisationUniqueEvent?.Invoke(this, new BooleanEventArgs(false));