Я новичок в модульном тестировании, уже пару часов ищу в сети и все еще не могу найти ответ на свой простой вопрос.
У меня есть класс со следующим событием:
event Action<ITagData> OnTagHandled
Теперь я хочу написать модульный тест, чтобы убедиться, что событие было вызвано, но когда я пишу что-то вроде:
Assert.Raises<EventArgs>(handler => m_rssiHander.OnTagHandled += handler,
handler => m_rssiHander.OnTagHandled -= handler, () => { });
Я получаю ошибку как:
Невозможно неявно преобразовать тип System.EventHandler в System.Action
Может ли кто-нибудь сказать мне, как я могу подтвердить событие типа Action<T>
?
2 ответа
В конце концов я решил сделать это так:
bool wasEventRaised = false;
m_rssiHandler.OnTagHandled += data => { wasEventRaised = true;};
// Act
m_rssiHandler.ProcessTag(m_tag);
// Assert
Assert.True(wasEventRaised);
Это потому, что handler
является типом EventHandler<EventArgs>
так что m_rssiHander.OnTagHandled += handler
не будет работать
Вам придется изменить: event Action<ITagData> OnTagHandled
К event Action<EventArgs> OnTagHandled
для работы или любой дочерний класс EventArgs и наследует интерфейс ITagData
Например
class TagDataEventArgs: EventArgs, ITagData {}
И используйте его как: event Action<TagDataEventArgs> OnTagHandled
И утверждают:
Assert.Raises<TagDataEventArgs>(handler => m_rssiHander.OnTagHandled += handler,
handler => m_rssiHander.OnTagHandled -= handler, () => { });
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.