У меня есть привязанное поведение, которое подписывается на метод IsVisibleChanged в TabItem. Я хочу написать модульный тест, чтобы убедиться, что это событие подписано в приложенном поведении.Как проверить, было ли событие подписано
Что-то вроде этого:
Assert.IsTrue(myTabItem.IsVisibleChanged != null);
Я не могу это сделать, потому что мой тест вне класса TabItem поэтому он не может проверить равенство события.
Я также попытался это:
private class MyTabItem : TabItem
{
public bool IsVisibleChangedNull()
{
return base.IsVisibleChanged == null;
}
}
Это также не работает. У кого-нибудь есть хороший способ проверить это?
В этом случае вам может потребоваться использовать рефлексию и проверку белого ящика для доступа к списку подписчиков (поддерживающий делегат). Обратите внимание, что имя поля делегирования поддержки, скорее всего, не 'IsVisibleChanged', вам нужно будет выяснить, что это такое, и возможно найти его в словаре (WinForms использует словари событий в пространственной памяти, не уверен, что WPF также). –
Как в стороне, это действительно то, что требует теста? Это фрагмент кода, который может сломаться, и если это произойдет, не будет ли ошибка сразу очевидной? Я просто никогда не рассматривал тестирование того, что обработчик событий подписан ... Я тестирую свои алгоритмы, сложные вещи. –
@EdS. Это правильный аргумент. Я не был бы разбит сердцем, если бы не смог проверить этот раздел кода. Однако я обычно стараюсь как можно ближе к 100% охвату. – ConditionRacer