起订量版本:3.1.416.3
我们发现了一个由未取消订阅的事件引起的错误。我正在尝试编写一个单元测试来验证该事件是否已取消订阅。是否可以使用 验证这一点Mock<T>.Verify(expression)
?
我最初的想法是:
mockSource.Verify(s => s.DataChanged -= It.IsAny<DataChangedHandler>());
但显然
表达式树可能不包含赋值运算符
然后我尝试了
mockSource.VerifySet(s => s.DataChanged -= It.IsAny<DataChangedHandler>());
但这给了我
System.ArgumentException:表达式不是属性设置器调用。
如何验证是否已取消订阅?
如何使用事件
public class Foo
{
private ISource _source;
public Foo(ISource source)
{
_source = source;
}
public void DoCalculation()
{
_source.DataChanged += ProcessData;
var done = false;
while(!done)
{
if(/*something is wrong*/)
{
Abort();
return;
}
//all the things that happen
if(/*condition is met*/)
{
done = true;
}
}
_source.DataChanged -= ProcessData;
}
public void Abort()
{
_source.DataChanged -= ProcessData; //this line was added to fix the bug
//other cleanup
}
private void ProcessData(ISource)
{
//process the data
}
}
忽略代码的复杂性,我们正在处理来自外部硬件的信号。这实际上对算法有意义。