Я новичок в модульном тестировании, уже пару часов ищу в сети и все еще не могу найти ответ на свой простой вопрос.

У меня есть класс со следующим событием:

event Action<ITagData> OnTagHandled

Теперь я хочу написать модульный тест, чтобы убедиться, что событие было вызвано, но когда я пишу что-то вроде:

Assert.Raises<EventArgs>(handler => m_rssiHander.OnTagHandled += handler,
    handler => m_rssiHander.OnTagHandled -= handler, () => { });

Я получаю ошибку как:

Невозможно неявно преобразовать тип System.EventHandler в System.Action

Может ли кто-нибудь сказать мне, как я могу подтвердить событие типа Action<T>?

2
Alireza Kahaei 23 Окт 2018 в 22:52

2 ответа

Лучший ответ

В конце концов я решил сделать это так:

 bool wasEventRaised = false;
 m_rssiHandler.OnTagHandled += data => { wasEventRaised = true;};

 // Act
 m_rssiHandler.ProcessTag(m_tag);

 // Assert
 Assert.True(wasEventRaised);
0
Alireza Kahaei 26 Окт 2018 в 18:28

Это потому, что 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, () => { });
1
Aman B 23 Окт 2018 в 21:21
52956862