【问题标题】:Unit testing custom TopShelf setup code单元测试自定义 TopShelf 设置代码
【发布时间】:2016-05-17 09:07:41
【问题描述】:

在我的解决方案中,我添加了 TopShelf 服务。我一直在编写一些单元测试并尝试模拟隔离我为设置此服务而编写的功能所需的内容。

到目前为止,我已经模拟了HostControl 接口Start()Stop() 函数,但是当我运行单元测试来运行服务时,我得到一个AbnormalExit 作为TopshelfExitCode 返回。

我想知道是否有人在这方面有经验,并且可以指出我还需要模拟什么的正确方向,或者就实现我的测试要求的最佳方法提出建议。

我的测试设置目前如下所示:

ServiceControlMock = new Mock<ServiceControl>();
ServiceControlMock.Setup(m => m.Start(It.IsAny<HostControl>())).Returns(true);
ServiceControlMock.Setup(m => m.Stop(It.IsAny<HostControl>())).Returns(true);

serviceExitCode = MyStaticServiceHost.RunService(ServiceControlMock.Object);

我有以下测试:

ServiceControlMock.Verify(m => m.Start(It.IsAny<HostControl>()), Times.Once);
Assert.AreEqual(TopshelfExitCode.Ok, serviceExitCode);

提前致谢

【问题讨论】:

    标签: c# unit-testing service tdd topshelf


    【解决方案1】:

    我的建议是创建自己的假货,而不是在这里嘲笑。

    创建一个实现所需接口的 ServiceControlFake,但使用您的自定义测试实现。然后你就可以看到它在哪里被调用以及你可以返回什么。

    如果可能,您可以考虑将您的 ServiceControl 接口也减少到最少使用的功能,这将简化您的假实现。

    了解会发生什么后,如果问题是微不足道的,您可以切换回模拟。我个人更喜欢定制假货,因为它们隐藏的行为更少。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2011-11-05
      • 2018-02-25
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多