单元测试事件触发的行为

Mor*_*ten 2 c# tdd nunit unit-testing

我已经使用了一段时间的模式.而且我想知道我做的是否正确.我有一个侦听事件的控制器类,并在引发事件时执行私有方法.它有点像这样:

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;
}
Run Code Online (Sandbox Code Playgroud)

在MyController.HandleEvent中测试代码的唯一方法是创建一个存根:IMyEventRaiser,它会引发代码.

我不确定这种设计是否合适.一方面,我想将HandleEvent方法保持为私有,以便说明只有一个事件可以触发它.另一方面,私有方法包含关键业务逻辑,因此我觉得它应该是公共的或至少是内部的,这也使得单元测试更容易.

你觉得怎么样?

此致,莫滕

Car*_*ter 6

你有什么听起来像(轻度)违反SRP.您的控制器都响应事件并保存为特定事件执行的复杂逻辑.如果您的控制器只是将必要的数据发送到完成实际工作的专用处理器,该怎么办?处理器的方法必然是公开的 - 因此是可测试的!TDD是如何指出SRP违规的?