在我的解决方案中,我添加了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);
提前致谢
答案 0 :(得分:0)
我的建议是创建自己的假货,而不是在这里嘲笑。
创建一个ServiceControlFake,实现所需的接口,但是使用自定义测试实现。然后,您将能够看到它的调用位置以及您可以返回的内容。
如果可能,您可以考虑将ServiceControl接口减少到最小化使用功能,它将简化您的虚假实现。
当了解发生的情况时,如果问题很简单,您可以切换回模拟。我个人更喜欢自定义假货,因为它们隐藏的行为较少。
希望它有所帮助。