【发布时间】:2013-02-18 10:08:05
【问题描述】:
我第一次尝试实现测试驱动的开发。 我的项目是 dotnet 3.5 中的 c#。 我已经阅读了 C# 中的专业测试驱动开发一书,现在我想测试包含 Windows 服务的项目。我读过最佳实践是所有代码都必须经过测试。以下是我的 Windows 服务实现方法 onStart 和 onStop
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Threading;
using log4net;
namespace MyUcmaService
{
public partial class MyUcmaService : ServiceBase
{
private Worker _workerObject;
private static MyUcmaService aMyUcmaService;
private Thread _workerThread;
private static ILog _log = LogManager.GetLogger(typeof(MyUcmaService));
public MyUcmaService()
{
InitializeComponent();
aMyUcmaService = this;
}
protected override void OnStart(string[] args)
{
// TODO: inserire qui il codice necessario per avviare il servizio.
//Debugger.Launch();
AppDomain.CurrentDomain.UnhandledException += AppDomainUnhandledException;
try
{
_workerObject = new Worker();
_workerThread = new Thread(_workerObject.DoWork);
// Start the worker thread.
_workerThread.Start();
}
catch (Exception ex)
{
HandleException(ex);
}
}
protected override void OnStop()
{
// TODO: inserire qui il codice delle procedure di chiusura necessarie per arrestare il servizio.
try
{
_workerObject.RequestStop();
_workerThread.Join();
}
catch (Exception ex)
{
HandleException(ex);
}
}
private static void AppDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
HandleException(e.ExceptionObject as Exception);
}
private static void HandleException(Exception ex)
{
if (ex == null)
return;
_log.Error(ex);
if (aMyUcmaService != null)
{
aMyUcmaService.OnStop();
}
}
}
}
你能告诉我如何在这里实现 tdd 吗? 感谢您的回复。
【问题讨论】:
-
如果您已经编写了实现......您将无法完成测试驱动开发。
-
要补充@J.Steen 所说的话,您需要明确区分集成测试和单元测试。例如,测试记录器是否已将某些内容写入文件,这意味着您正在进行集成测试。通常在单元测试中,您会尝试使用虚假的外部依赖项删除所有这些外部依赖项并测试您的核心“业务”逻辑。我希望我说得通
-
@J.Seen 那是我的目标,我想从测试开始重写我的旧项目..但可能是 Dimitar 所说的集成测试......
-
@AndreaG 对。细节,细节,细节。您需要在问题中包含这些信息花絮,以减少误解的机会。 =)
-
这类似于 TDD-ing 控制台应用程序或 GUI,您编写一个 Launcher 程序并立即委托给一个类。例如Main() 函数调用 BootStrapper.Run() - 现在您可以 TDD bootstrapper.Run 并继续向内。我会通过手动运行手动测试 Main Calls Bootstrapper 是否。它破坏的可能性较小并且没有人发现+如果它曾经做过快速修复=>也许不值得自动化。
标签: tdd nunit ninject moq ninject-2