我收到一个旧项目并开始为SUT目的重构它。我使用Moq和NUnit框架。我在这个项目中遇到了下一堂课:
public ServerRunner()
{
Name = ConfigurationManager.AppSettings["ServiceName"];
WinService = new ServiceController(Name);
logger = new Logger.Logger(Name);
syncRoot = new ReaderWriterLockSlim();
timeoutMilliseconds = 10000;
}
我是单元测试世界的新手,所以我需要建议 - 如何提取和模拟System.ServiceController类?它可以由Moq完成,还是我应该使用其他一些Mock框架?
答案 0 :(得分:1)
看来ServiceController
不是一个容易Moq
能力的课程,但您可以随时执行以下操作:
ServiceControllerWrapper
)。IServiceControllerWrapper
)。IServiceControllerWrapper
实例传递给ServerRunner
的构造函数,并在该类中使用该实例。ServerRunner
类将IServiceControllerWrapper
接口的Moq作为参数传递给构造函数。看起来像这样:
public ServerRunner(IServiceControllerWrapper controllerInstance)
{
Name = ConfigurationManager.AppSettings["ServiceName"];
WinService = controllerInstance;
logger = new Logger.Logger(Name);
syncRoot = new ReaderWriterLockSlim();
timeoutMilliseconds = 10000;
}
希望这有帮助!
答案 1 :(得分:1)
如果你想模拟ServiceController,我把它放在一个接口后面。例如,
for
然后使用依赖注入(不一定使用DI框架)将其引入ServerRunner类。