【问题标题】:Testing Windows Service in .Net在 .Net 中测试 Windows 服务
【发布时间】:2011-07-01 10:59:36
【问题描述】:

我正在用 C# .Net 开发一个 Windows 服务,我在执行和测试我的服务时遇到了一些困难。 我正在使用计时器组件不时运行它并执行我的方法。我必须一直初始化服务才能运行它。 有人知道更实用的服务测试方法吗?

【问题讨论】:

标签: c# .net windows windows-services


【解决方案1】:

这通常归结为问题你想测试什么。您想测试服务还是它执行的功能?我个人会...

  • 将所有服务功能重构到一个单独的类库中
  • 测试库
  • 从服务调用库功能

...然后将服务本身中的代码量保持在触发类库中的功能所需的最低限度。

【讨论】:

  • 我想测试它的功能。
  • @tomcamara:那么我的回答中的要点应该适合你。
  • 完全正确。这使得测试服务变得简单,因为它要么触发要么不触发。
【解决方案2】:

Windows 服务是在启动时碰巧连接到服务控制管理器的普通 EXE。

我通常通过在Main 方法中给它们一个可选的命令行参数来测试服务,告诉它们正常执行,而不是充当服务。这样我就可以直接在 Visual Studio 中或在命令行等上调试它们。

【讨论】:

  • 尽管您的 cmets 为我们指明了一个方向,但如果您发布了一个示例来说明您是如何实现这一目标的,那将会非常有用。这是我第一次开发服务,所以我不会将它与您的 cmets 放在一起,我认为对于使用谷歌搜索的人来说也是如此。 :)
【解决方案3】:

您可能希望将单元测试添加到您的服务中。

听起来您可以通过将应用程序添加到 Task Scheduler 而不是将其作为服务运行来获得更多好处。

除此之外,如果您真的需要它作为一种服务,您需要对其进行设计以便对其进行测试。我通常在一个单独的类中编写我的服务并向其中添加一个 .EXE 项目,这样我也可以从命令行运行它。

【讨论】:

  • 确实是我想做的,在单独的类中创建服务功能,因为我可以测试 Windows 窗体项目或命令行的类。
【解决方案4】:

我在开发时运行服务的一种方式是遵循这些原则 - Run a windows service as a console。我发现它很有用,因为您可以添加代码以写入控制台以获取调试信息并写入任何相关的异常数据。

我不会使用这种方法来代替单元测试,但我发现这是一种在需要时工作和调试的有用方法。

【讨论】:

    【解决方案5】:

    创建窗口服务后,您可以将其设置为窗口服务。

    使用 InstallUtil.exe 安装服务 要安装或卸载 Windows 服务(使用 .NET Framework 创建),请使用实用程序 InstallUtil.exe。该工具可以在以下路径中找到(使用适当的框架版本号)。

    C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe

    要安装 .NET 服务运行类似于此的命令(指定服务的完整路径)。

    InstallUtil.exe“服务路径”

    要卸载 .NET 服务,请使用带有参数 /u 的相同命令。

    InstallUtil.exe /u "服务路径"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      相关资源
      最近更新 更多