[英]Unit Test Event Handler
I got this event handle and how can I do unit test for this 我得到了这个事件句柄,该如何进行单元测试
public class MyLearningEvent
{
private event EventHandler _Closed;
public event EventHandler Closed
{
add
{
_Closed -= value;
_Closed += value;
}
remove
{
_Closed -= value;
}
}
public void OnClosed()
{
if (_Closed != null) _Closed(this, EventArgs.Empty);
}
}
Just modified code so that much clear 刚刚修改的代码就这么清晰了
Thanks 谢谢
You should not unit test that code. 您不应该对该代码进行单元测试。 It's a feature which is built into .NET. 这是.NET内置的功能。 Your event handling is flawed imho. 您的事件处理存在缺陷,恕我直言。
add
{
_Closed -= value;
_Closed += value;
}
Probably means that your invokers don't keep track on if they have subscribed or not. 可能意味着您的调用者无法跟踪他们是否已订阅。 That can lead to memory leaks: http://blog.naviso.fr/wordpress/wp-content/uploads/2011/11/MemoryLeaks-English.jpg 这可能导致内存泄漏: http : //blog.naviso.fr/wordpress/wp-content/uploads/2011/11/MemoryLeaks-English.jpg
A more robust (and thread safe implementation) is: 更加健壮(和线程安全的实现)是:
public class MyLearningEvent
{
public event EventHandler Closed = delegate {};
public void TriggerClosed()
{
Closed(this, EventArgs.Empty);
}
}
But you should not let anyone else trigger that event (make the TriggerClosed
private/protected) 但是您不应该让其他任何人触发该事件(将TriggerClosed
私有/受保护)
Try this method. 试试这个方法。 This assumes MyClass.Close()
raises the MyClass.Closed
event. 假定MyClass.Close()
引发MyClass.Closed
事件。
public void ClosedEventHandlerIsNotCalledAfterBeingRemoved()
{
MyLearningEvent Target = new MyLearningEvent();
EventHandler Target_Closed = new EventHandler((sender, e) => { Assert.Fail("Closed EventHandler was raised after being removed."); });
Target.Closed += Target_Closed;
Target.Closed -= Target_Closed;
Target.OnClosed();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.