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. Si vous pensez 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.
De 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.
- regardez stackoverflow.com/questions/1004424/... il y a une question similaire, avec quelques liens (PSUnit et Lee Holmes post)
- Ne prenez jamais de Powershell à la légère. Il est incroyablement puissant avec un minimum de code.
Vous devez vous connecter pour publier un commentaire.
Scott Muc a lancé un projet pour un léger BDD cadre de PowerShell appelé Harceler:
https://github.com/pester/Pester
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.
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.
Petites notes qui pourront vous aider:
-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.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.
Comme un privilégié, 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.
De votre question, je pense que vous êtes dirigé à la déception. Powershell est juste un peu de ligne de commande de la langue. Bien sûr, il peut faire quelque chose que le C# peut faire, et même plus, mais alors il peut en langage d'assemblage. Bien sûr, c'est aussi OO et accroché à la .Bibliothèques NET, mais c'est C#, qui est beaucoup plus propre langue.
Si une solution est plus longue qu'une seule ligne, ou vous pensez que vous avez besoin de TDD, alors vous ne voulez pas être à l'aide de Powershell. C'est un langage codé qui est plein de surprises, à éviter pour rien de compliqué.
Si vous voulez faire un peu ad hoc de recherche et de remplacement ou de mise en forme de texte, ou de regarder autour dans votre système de fichiers, puis Powershell est votre ami. Ce que vous voulez vraiment faire est de l'utiliser un peu tous les jours, et vous répétez souvent, afin de rester familier avec la syntaxe. Pour cette raison, éviter également open source Powershell bibliothèques, et d'oublier sur l'écriture de vos propres Applets de commande, sauf si vous avez un très spécialisées cas pour les ad hoc de l'utilisation de lignes de commande. Le tuyau de règles contraignantes sont des arcanes et laid.
Tout ceci n'est que mon avis, bien sûr, mais je suis depuis longtemps Powershell utilisateur et je suis beaucoup plus heureux avec elle maintenant que je la regarde comme ça.