您無法瞭解事件的狀態;通過設計,你只能註冊到它+ =或取消註冊 - =從它。因此,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);
}
= ==舉例用於事件註冊的rhino測試=====
[Test]
public void Test()
{
var mockCorpseKicker = MockRepository.GenerateMock<INotifyPropertyChanged>();
mockCorpseKicker.PropertyChanged += null;
mockCorpseKicker.AssertWasCalled(x => x.PropertyChanged += Arg<PropertyChangedEventHandler>.Is.Anything);
}
您能否粘貼您的代碼示例? – 2010-02-18 10:23:54