【发布时间】:2017-02-23 13:25:08
【问题描述】:
我现在正在做这个
bool didFire = false;
_viewModel.SomethingChanged = () => didFire = true;
_viewModel.SomeProperty = SomeValue;
Assert.IsTrue(didFire);
这有缺点:
- 设置又丑又长。
- 每次我拨打多个电话时,我都需要将
didFire重置为false手动,例如,如果我想测试在某些情况下触发的事件,但并非总是如此,遵循某个设想。这很容易出错,因为忘记它可能会破坏测试。 - 由于有许多事件/回调/情况,这会导致用于测试简单事件的更多样板代码。
所以就像任何体面的程序员都会做的那样,在看到自己重复相同的任务之后,我想将它存储在一个函数中。
我想出的最佳想法是将其放入 Assert 扩展方法中,但我自己或在线都找不到合适的方法来使它工作并且仍然很好。
理想情况下,我正在寻找可以如下工作的东西
Assert.WillBeRaised(_viewModel.SomethingChanged);
_viewmodel.SomeProperty = SomeValue;
或者,也许正好相反
_viewmodel.SomeProperty = SomeValue;
Assert.WasRaised(_viewModel.SomethingChanged);
这就是我的问题所在,在引发事件之前必须有人在听,并且必须在之后进行断言。所以不管怎样,我觉得我最终会写太多代码行。
有没有人为这个相当普遍的问题找到一些干净的解决方案?
【问题讨论】:
标签: c# unit-testing events extension-methods assert