【发布时间】:2011-02-25 09:09:22
【问题描述】:
我使用模式已经有一段时间了。我想知道我是否做对了。我有一个监听事件的控制器类,并在引发事件时执行一个私有方法。它有点像这样:
public class MyController
{
public MyController(IMyEventRaiser eventRaisingObject)
{
eventRaisingObject.MyEvent += HandleEvent;
}
private void HandleEvent(object sender, EventArgs args)
{
// SOME STUFF I WANT TO TEST!!
}
}
public class EventRaisingClass : IMyEventRaiser
{
public event EventHandler<EventArgs> MyEvent;
}
在 MyController.HandleEvent 中测试代码的唯一方法是创建一个引发代码的 stub:IMyEventRaiser。
我不确定这种设计是否合适。一方面,我想让 HandleEvent 方法保持私有,以说明只有事件才能触发它。另一方面,私有方法包含关键业务逻辑,所以我觉得它应该是公共的,或者至少是内部的,这也将使单元测试更容易。
你们怎么看?
问候, 莫腾
【问题讨论】:
-
为什么不像其他私有方法一样使用私有访问器(即反射)来测试您的私有方法?
-
这对我来说是一个未知的程序。一定会查的:-)
-
你的所作所为没有什么不妥之处。不过有一条评论:您可能需要 mock,甚至是 fake,但不需要 stub。通常,存根不会做任何事情,也不会触发任何事件。
标签: c# unit-testing tdd nunit