Модульное тестирование событий в C # (по порядку)

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

Код, который вызывает события, похож на

public class MyClass : INotifyPropertyChanged
{
   public event PropertyChangedEventHandler PropertyChanged;  

   protected void NotifyPropertyChanged(String info)
   {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
   }  

   public string MyProperty
   {
       set
       {
           if (_myProperty != value)
           {
               _myProperty = value;
               NotifyPropertyChanged("MyProperty");
           }
       }
   }
}

Я получил хороший зеленый тест из следующего кода в моих модульных тестах, в котором используются делегаты:

[TestMethod]
public void Test_ThatMyEventIsRaised()
{
    string actual = null;
    MyClass myClass = new MyClass();

    myClass.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e)
    {
         actual = e.PropertyName;
    };

    myClass.MyProperty = "testing";
    Assert.IsNotNull(actual);
    Assert.AreEqual("MyProperty", actual);
}

Однако , если я затем попытаюсь объединить настройки свойств вместе следующим образом:

public string MyProperty
{
    set
    {
        if (_myProperty != value)
        {
            _myProperty = value;
            NotifyPropertyChanged("MyProperty");
            MyOtherProperty = "SomeValue";
        }
    }
}

public string MyOtherProperty
{
    set
    {
        if (_myOtherProperty != value)
        {
            _myOtherProperty = value;
            NotifyPropertyChanged("MyOtherProperty");
        }
    }
}

Мой тест на событие не пройден - событие, которое он захватывает, является событием для MyOtherProperty.

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

Итак, мне интересно:
1. Правильный ли мой метод тестирования событий?
2. Правильно ли мой метод получения связанных событий ?

148
задан Adam B 10 July 2019 в 19:22
поделиться

1 ответ

Все, что Вы сделали, корректно, если Вы хотите, чтобы Ваш тест спросил, "Каково последнее событие, которое было сгенерировано?"

Ваш код запускает эти два события в этом Измененном Свойстве порядка

  • (... "Мое Свойство"...)
  • Измененное Свойство (... "MyOtherProperty"...)

, "Корректно" ли это или не зависит от цели этих событий.

, Если Вы хотите протестировать число событий, которое увеличено, и порядок, в котором они повышены, можно легко расширить существующий тест:

[TestMethod]
public void Test_ThatMyEventIsRaised()
{
    List<string> receivedEvents = new List<string>();
    MyClass myClass = new MyClass();

    myClass.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e)
    {
        receivedEvents.Add(e.PropertyName);
    };

    myClass.MyProperty = "testing";
    Assert.AreEqual(2, receivedEvents.Count);
    Assert.AreEqual("MyProperty", receivedEvents[0]);
    Assert.AreEqual("MyOtherProperty", receivedEvents[1]);
}
174
ответ дан David Hall 10 July 2019 в 19:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: