代码之家  ›  专栏  ›  技术社区  ›  Themelis

如何测试xUnit中不会触发事件?

  •  1
  • Themelis  · 技术社区  · 6 年前

    1. 测试一个事件不会被触发是否有意义?
    2. xUnit 框架?

    例如,我有一个只有一个属性的类 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;
    }
    

    我想测试一下 作记号 到与当前属性点相同的值,然后 PropertyChanged 不会触发事件。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Fred    6 年前

    1) 是的,这很有道理。如果要求在某些情况下不触发某个事件,则应该对其进行测试。

    [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 }