【发布时间】:2018-02-02 17:51:38
【问题描述】:
在编写单元测试时,有没有一种简单的方法可以确保没有意外发生?
由于可能的副作用列表是无限的,因此添加大量 Assert 以确保在每一步都没有改变似乎是徒劳的,而且它混淆了测试的目的。
我可能错过了一些框架功能或良好实践。
我正在使用 C#7、.net 4.6、MSTest V1。
编辑: 更简单的例子是测试视图模型的设置器,应该发生两件事:值应该改变并且应该引发 PropertyChanged 事件。 这两件事很容易检查,但现在我需要确保其他属性值没有改变,没有引发其他事件,没有触及系统剪贴板......
【问题讨论】:
-
“什么都没发生”具体是什么意思?如果你执行代码'某事'将会发生。你想验证什么没有改变?变量还是?
-
正如你所说,副作用列表是无限的。所以你应该检查一下,这些情况不会发生。
-
每个测试应该只检查一件事,所以除了这件事你不关心其他任何事情。我不管
Add(1,5)是不是用积分算出来的,只要我得到6就可以了…… -
如果你发现你需要这样的东西,我猜你没有足够的测试隔离。
-
有点旁注,但这是使用基于事件的模型的优势之一,例如在 CQRS+ES 中。实体上发生的一切都以事件的形式发生,因此很容易知道是否没有发生任何事情:只需查看是否生成了任何事件!
标签: c# .net unit-testing mstest