Как проверить, что событие не будет запущено в xUnit? - PullRequest
1 голос
/ 05 апреля 2020

У меня два вопроса.

  1. Имеет ли смысл проверять, что событие не будет запущено?
  2. Если да, каков наилучший способ выполнить sh что с использованием xUnit framework?

Например, у меня есть класс с одним свойством Mark,

public class Box : INotifyPropertyChanged
{
  private Marking mark = Marking.None;

  public Marking Mark
  {
    get
    {
      return mark;
    }
    set
    {
      mark = value;
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Mark)));
    }
  }

  public event PropertyChangedEventHandler PropertyChanged;
}

и Я хочу проверить что, когда кто-то собирается установить значение Mark равным значению, которое указывает свойство в данный момент, событие PropertyChanged не будет запущено.

1 Ответ

2 голосов
/ 05 апреля 2020

1) Да, это имеет смысл. Если требование состоит в том, что событие не должно запускаться при определенных обстоятельствах, тогда должен быть тест для него.

2) Примерно так: ‍‍

[Fact]
public void PropertyChangedNotFired()
{
    Box box = new Box();

    int fireCount = 0;

    box.PropertyChanged += (s, e) => ++fireCount;

    box.Mark = Marking.Tick;

    Assert.Equal(1, fireCount); // Sanity check. Not strictly speaking following AAA

    box.Mark = Marking.Tick;

    Assert.Equal(1, fireCount); // If we get 2, event has wrongly fired
}

Это предполагает перечисление (что вы не показали) что-то вроде:

public enum Marking { None, Tick, Cross }
...