如何测试不会在 xUnit 中触发事件?
How to test that an event will not be fired in xUnit?
我有两个问题。
- 测试事件不会被触发是否有意义?
- 如果是,使用
xUnit
框架实现该目标的最佳方法是什么?
例如,我有一个 class 和一个 属性 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) 像这样:
[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 }
我有两个问题。
- 测试事件不会被触发是否有意义?
- 如果是,使用
xUnit
框架实现该目标的最佳方法是什么?
例如,我有一个 class 和一个 属性 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) 像这样:
[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 }