Предоставляет ли NUnit способ утверждать, что на события объектов подписываются? - PullRequest
1 голос
/ 18 февраля 2010

У меня есть объект, который передается в метод в качестве параметра. У этого объекта есть событие, на которое следует подписаться, когда я вызываю этот метод с объектом в качестве аргумента.

Позволяет ли NUnit мне это проверить?

Редактировать: добавлен пример кода:

    [Test]
    public void AddingToCollectionShouldHookPropertyChangedEventUp()
    {
        // Arrange:
        var viewModel = new viewModel();
        var viewModelCollection = new viewModelCollection();

        // Act:
        viewModelCollection.AddViewModel(viewModel);

        // Assert that the property changed event is hooked up in some way:
        // This is commented out because I cannot do this. I left it here to  
        // illustrate what I want to achieve:
        //blockViewModel.PropertyChanged.Should().Not.Be.Null();
    }

Ответы [ 2 ]

3 голосов
/ 19 февраля 2010

Вы не можете получить в состоянии события;По замыслу вы можете только зарегистрироваться на него + = или отменить регистрацию - = от него.Из-за этого 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);
    }
0 голосов
/ 18 февраля 2010

Вы можете просто проверить, является ли событие пустым.Если у него есть подписчики, он не будет нулевым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...