Вы не можете получить в состоянии события;По замыслу вы можете только зарегистрироваться на него + = или отменить регистрацию - = от него.Из-за этого NUnit не предоставляет расширения или другого механизма для проверки подписки на событие.
Если событие находится на интерфейсе, вы можете проверить подписку с помощью фиктивного класса (вашего илимакет фреймворка, например, Rhino).
Конечно, вы можете проверить поведение события в любом случае!
Если вы напишете какой-то код, я уверен, что кто-то поможет вам подготовить содержательный тест.Вот пример фиктивного примера, чтобы дать вам несколько идей:
[Test]
public void ChangingTheWhateverProperty_TriggersPropertyChange()
{
// Create anonymous delegate which is also your test assertion
PropertyChangedEventHandler anonymousDelegate = (sender, e) => Assert.AreEqual("Whatever", e.PropertyName);
// Subscribe to the needed event
vm.PropertyChanged += anonymousDelegate;
// trigger the event
vm.Whatever = "blah";
}
HTH,
Berryl
=== модифицированный пример с вашим кодом =======
[Test]
public void AddingToCollectionShouldHookPropertyChangedEventUp()
{
// Arrange:
var viewModel = new viewModel();
var viewModelCollection = new viewModelCollection();
// This *IS* your assert also, and will get called back when you Act
// The only part you need to supply for this test is the property that gets fired when you add a viewmodel
PropertyChangedEventHandler anonymousDelegate = (sender, e) => Assert.AreEqual("Whatever", e.PropertyName);
// Subscribe to the needed event
viewModelCollection.PropertyChanged += anonymousDelegate;
// Act:
viewModelCollection.AddViewModel(viewModel);
}
=== пример теста носорога для регистрации события =====
[Test]
public void Test()
{
var mockCorpseKicker = MockRepository.GenerateMock<INotifyPropertyChanged>();
mockCorpseKicker.PropertyChanged += null;
mockCorpseKicker.AssertWasCalled(x => x.PropertyChanged += Arg<PropertyChangedEventHandler>.Is.Anything);
}