60 votes

Comment puis-je tester un service Windows?

.NET Framework: 2.0 Langue Préférée: C#

Je suis nouveau sur le TDD (Test Driven Development).

Tout d'abord, est-il même possible de test de l'unité de Service de Windows?

Windows service de classe est dérivée de ServiceBase, qui a des méthodes substituables,

  1. OnStart
  2. OnStop

Comment puis-je déclencher de ces méthodes pour être appelée que si le test unitaire est un réel service qui appelle ces méthodes dans le bon ordre?

À ce point, je suis même en faisant un test Unitaire? ou d'un test d'Intégration?

J'ai regardé service WCF question, mais elle n'a pas de sens pour moi depuis que j'ai jamais fait affaire avec le service WCF.

89voto

Guy Starbuck Points 14241

Je recommenderais de la conception de votre application de sorte que le "Démarrage" et "OnStop" remplace dans le Service Windows viens d'appeler les méthodes d'une classe de la bibliothèque de l'assemblée. De cette façon, vous pouvez automatiser les tests unitaires à l'encontre de la bibliothèque de classe de méthodes, et la conception de résumés votre logique métier de la mise en œuvre d'un Service Windows.

Dans ce scénario, le test de la "Démarrage" et "OnStop" méthodes elles-mêmes dans un Service Windows contexte serait alors un test d'intégration, pas quelque chose que vous automatiser.

32voto

Kevin Berridge Points 3313

J'ai testé unitaire services windows de ne pas tester le service directement, mais plutôt de tester ce que fait le service.

Généralement, je créer un assembly pour le service et l'autre pour ce que fait le service. Puis-je écrire des tests unitaires contre la deuxième assemblée.

La bonne chose à propos de cette approche est que votre service est très mince. Fondamentalement, il fait appel à des méthodes pour faire le droit du travail au bon moment. Vos autres assembly contient toute la viande du travail que votre service a l'intention de faire. Cela rend très facile à réaliser et facile à réutiliser ou les modifier au besoin.

11voto

David Basarab Points 25852

Je commencerais par ici . Il montre comment démarrer et arrêter des services en C #

Un échantillon pour commencer est est

 public static void StartService(string serviceName, int timeoutMilliseconds)
{
  ServiceController service = new ServiceController(serviceName);
  try
  {
    TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);

    service.Start();
    service.WaitForStatus(ServiceControllerStatus.Running, timeout);
  }
  catch
  {
    // ...
  }
}
 

J'ai également testé des services principalement via une application console, en simulant ce que le service ferait. De cette façon, mon test unitaire est complètement automatisé.

5voto

Erik van Brakel Points 7589

Je voudrais utiliser le service windows de classe (celui que vous exécuter lorsque vous démarrez/arrêtez le service) comme une sorte de proxy pour votre système réel. Je ne vois pas comment le code derrière votre service devrait être différente de toute autre programmation. Le démarrage et onStop méthodes sont tout simplement les événements de feu, en appuyant sur un bouton sur une interface graphique.

Si votre windows classe de service est une couche très fine de classe, comparable à un formulaire windows. Il appelle votre logique métier/domaine de la logique, qui fait ce qu'il est censé faire. Tout ce que vous avez à faire est de vous assurer que la ou les méthode(s) vous appelez dans votre onStart et onStop comme ils sont supposés. Au moins, c'est ce que je ferais ;-)

0voto

Trupti Points 1

Tester le service Window en mode d'extinction automatique, conditions d'arrêt Tester le service Window en cas de déconnexion du réseau, de connexion Tester le démarrage automatique de l'option de service de fenêtre, manuel, etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X