C#单元测试复杂处理程序网络

sic*_*umi 3 c# unit-testing moq

我有一个相当复杂的程序架构,只有很少的逻辑但很多事件处理程序传递.我正在构建一个服务器框架的框架,我有以下类:

Core,听取:

CommHandler,听取:

CommLayer,听取:

IServerMock,我用模拟框架(MOQ)存根.

这种由事件触发的单元测试关系的最佳方法是什么?我知道单元测试应该是非常孤立和细化的东西,但我能想到测试的唯一方法是测试整个过程并检查Core的最终输出.

Tre*_*ley 5

你需要为每个类做一个抽象,所以Core取决于ICommHandlernot CommHandler等等.依赖项应该通过构造函数提供,这样您就可以轻松地单独测试每个类,因为您可以模拟它的依赖性.

public class Core
{
    private ICommHandler commHandler;

    public Core(ICommHandler commHandler)
    {
        this.commHandler = commHandler;
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的生产代码中,您可以执行以下操作:

var core = new Core(new CommHandler());
Run Code Online (Sandbox Code Playgroud)

虽然最好使用IOC容器来管理对象的实例化,因为CommHandler它有自己的依赖关系,但你应该分别研究它.

然后在你的单元测试中,你可以这样做:

[Test]
public void TestSomeCommHandlerEvent()
{
     var mockCommHandler = new Mock<ICommHandler>();
     // set up the mock

     var core = new Core(mockCommHandler.Object);
}
Run Code Online (Sandbox Code Playgroud)

这样做允许您使用可以配置其行为的模拟替换测试中的ICommHandler实现.