70 votes

Comment faire TDD et les tests unitaires dans powershell?

Avec MS battant powershell dans tous les nouveaux produits serveur, je commence à m' (à contrecœur) pense que j'ai besoin de le prendre au sérieux. Partie de "prendre au sérieux" est TDD. Avez-vous trouvé les bonnes méthodes de test de l'unité de puissance des scripts shell?

J'ai trouvé des échantillons de se moquer de M. Geek Bruit - mais je voudrais vraiment quelque chose comme RhinoMocks. Brian Hartsock dispose d'un échantillon de l'exécution des tests sur powershell chaînes à partir de MS Test. Un peu hacky, mais il semble fonctionner.

Ce que je veux c'est un Powershell TDD expérience qui est aussi propre qu'il l'est dans la "vraie" langues.


Mise à jour pour clarifier:

Les deux premières réponses tenter de diriger moi, loin de tests de Powershell. Les avis sont intéressants. Je ne veux pas savoir si c'est une bonne idée de tester en powershell. C'est une question subjective qui doit être demandé dans un autre forum. Je veux une solution pour les tests unitaires powershell. Je vous pense que c'est une mauvaise idée (peut-être), le traiter comme un plaisir académique question.

  • Oui, les langages de script colle ensemble des systèmes disparates. Cependant, comme l'a déjà souligné, il est également facile de se moquer et de briser les coutures dans la dynamique de la langue.
  • Je ne suis pas de demander à propos de "débogage". Le débogage est un outil très utile de sujet. Je vais laisser quelqu'un d'autre le lui demander.
  • Peut-être PS scripts doivent être simples. La langue prend en charge la modularité et il est inévitable que des processus complexes qui sera mis en œuvre en PS (même si une mauvaise idée).
  • La réponse à cette question n'est pas "Tu ne peux pas". Je peux voir (liées blogs qui sont un peu vieux) que certaines personnes ont fait des progrès sur le problème.

Re-état: Comment mettre en place un système automatisé de tests de Powershell logique dans le style de xUnit? Les tests d'intégration sont intéressants, les tests unitaires que briser les dépendances les plus intéressantes.

46voto

Martin Su Points 1163

Scott Muc a lancé un projet pour un léger BDD cadre de PowerShell appelé Agacer:

https://github.com/pester/Pester

11voto

Cellfish Points 1708

PsUnit est maintenant mis à jour avec un cadre. J'ai eu le même problème que vous il y a quelques mois et j'ai senti PsUnit était grand et complexe pour le nombre de scripts, j'ai eu à l'écrire alors j'ai écrit mon propre infrastructure de test unitaire pour le PS. PS le même genre de charectaristics que d'autres langages de script likepython par exemple, vous pouvez remplacer les fonctions de n'importe où, à tout moment, même avec un champ d'application dans les méthodes d'essai qui est excellent pour simuler (un.k.un. moqueur). C'est, si vous avez une fonction ou un objet que vous souhaitez tester qui dépend d'autres fonctions, vous pouvez les déclarer dans votre méthode de test pour créer un local de faux de mise en œuvre.

Donc, quel que soit dont framework de test vous choisissez de l'utiliser, je dirais que le PS est très facile de TDD. Ce fut mon expérience au moins.

3voto

Peter Seale Points 2233

Je pense que vous vous posez à propos de "les stratégies de test" au lieu de TDD plus précisément, je vais donc répondre à ces deux questions.

Le gros de votre travail en PowerShell sera l'intégration d'un tas de systèmes disparates par les applets de commande et l'objet de tuyaux. Si vous voulez être sûr que vos scripts PowerShell travail, mettre autant d'efforts que possible dans la construction d'une mise en scène impeccable de l'environnement, de manière à tester tous ces systèmes de façon aussi précise que possible.

L'exécution de vos scripts dans un parfait environnement de test sera infiniment plus utile que de "donner de la consistance à votre conception de la" via TDD ou "test de votre code à l'intention de", après le fait de tests unitaires.

Les petites notes qui pourront vous aider:

  • L' -whatif commutateur existe sur construit-dans les applets de commande. Aussi, je viens de découvrir ce faire, vous pouvez ainsi: -whatif:$someBool - vous le saurez quand vous en avez besoin.
  • L'ISE à venir dans la V2 a un débogueur. Doux.
  • Vous pouvez toujours le code d'une applet de commande personnalisé en C# et en faire ce que vous voulez.

1voto

stej Points 14257

Regardez PsUnit

0voto

Draghon Points 81

Mort de discussion, mais les préoccupations sont très vivantes.

La seule chose que je vois manquant à partir de la discussion de l'utilité des tests unitaires PS compte tenu de son utilisation implique des modules dans un système d'entreprise. Imaginez un environnement d'entreprise avec un référentiel central pour les communes de réseau/fichier tâches au niveau de la mise en œuvre dans PS. Dans ce cadre, vous avez un petit nombre de développeurs et de spécialistes du réseau, qui tous ont légèrement le chevauchement des tâches. Un développeur crée un module d'encapsulation de la logique métier et de son utilité est immédiatement reconnu, de telle sorte que dans peu de temps, les autres sauter dans et intégrer le module dans leurs propres efforts. Le module est inclus dans quelque chose de ponctuel des scripts interactifs pour les moyennes applications client; Alors que certains ne pourriez pas d'accord sur le cas d'utilisation d'un shell-script langage, l'évolution est une constante dans ce domaine.

Dans ce scénario, je crois qu'il y a de la valeur dans la définition d'un ensemble de "contrats" pour ces modules communs à suivre. Si le partage des connaissances fait partie intégrante de l'organisation, alors il est possible que plus d'une personne serait de modifier ces modules. Avoir des tests unitaires pour valider l'intégrité des modules serait aller un long chemin vers le maintien de l'ordre et de minimiser le chaos ainsi de maintien (peut-être augmenter) la valeur des modules eux-mêmes.

Pour une approche privilégiée, je n'ai pas encore d'en adopter une. PS fait penser à un fluide/dynamique/agile substance. Contenant à l'intérieur d'une structure rigide comme ce que j'ai vu avec TDD se sent pas naturel. Toutefois, étant donné le scénario ci-dessus, cet objectif ne peut être ignoré. Tant pis, je suis déchiré, désolé de perdre votre temps. Merci pour la lecture.

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