Как выполнить модульное тестирование подписки на события - PullRequest
2 голосов
/ 02 ноября 2011

Я хочу иметь возможность модульного тестирования настраиваемой коллекции, которую я пишу, для которой необходимо подписаться на событие PropertyChanged объектов, добавляемых в коллекцию. А потом отписаться от событий при их удалении.

Это не имеет большого значения, когда элементы, добавленные в коллекцию, являются интерфейсом, я могу высмеять это (используя Rhino Mocks) и Expect подписки. Но в одном случае добавляемые элементы являются реальными классами, и я не могу издеваться над событиями, потому что они не являются виртуальными.

Есть ли другой способ проверить, правильно ли подписаны и отписаны их события PropertyChanged?

1 Ответ

3 голосов
/ 02 ноября 2011

Вместо использования макета вы можете просто добавить свойство к конкретному типу, которое сообщит вам, есть ли у события подписка или нет?Просто предложение.Это может не совпадать с общим дизайном и / или остальными вашими юнит-тестами с использованием поддельного интерфейса.

class SomeClass : INotifyPropertyChanged
{
   public bool PropertyChangedSubscribed
   {
      get { return PropertyChanged != null; }
   }

   public event PropertyChangedEventHandler PropertyChanged;
}

// unit test code
var someClass = new SomeClass();
Assert.IsFalse(otherClass.PropertyChangedSubscribed);
someClass.PropertyChanged += SubscribedMethod;
Assert.IsTrue(otherClass.PropertyChangedSubscribed);
...