c# - 如何测试在 xUnit 中不会触发事件?
问题描述
我有两个问题。
- 测试一个事件不会被触发是否有意义?
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;
}
我想测试当有人将值设置为与Mark
当前属性点相同的值时,PropertyChanged
不会触发该事件。
解决方案
1)是的,这很有意义。如果要求在某些情况下不应触发事件,则应该对其进行测试。
2)像这样的东西:</p>
[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 }
推荐阅读
- java - Callable 如何防止 call() 返回值
- dart - 卡片按钮如何像 Flutter 中的 Reddit App 一样组合在一起?
- android - 从 Firebase 数据库获取数据后更新 UI
- python - 我的 IDLE 说 Pygame 还没有安装,即使我已经安装了?
- c - 整数类型的对齐
- android - 使用 InCallService 以静默方式拒绝呼叫
- vue.js - 如何在 VueJS 组件中绑定 v-model
- android - 检查编辑文本是否为空时返回警报对话框
- python - 如何使用 python + selenium 从网站保存数据
- java - 无法解析符号 gson