web-dev-qa-db-fra.com

Génération automatique de tests unitaires .NET

Existe-t-il une génération de tests unitaires? Si c'est le cas...

... ça marche bien?

... Quelles sont les solutions de génération automatique disponibles pour .NET?

... y a-t-il des exemples d'utilisation d'une technologie comme celle-ci?

... n'est-ce bon que pour certains types d'applications, ou pourrait-il être utilisé pour remplacer tous les tests unitaires écrits manuellement?

40
Phobis

Jetez un œil à Pex . C'est un projet Microsoft Research. Depuis le site Web:

Pex génère des tests unitaires à partir de tests unitaires paramétrés manuscrits via des tests exploratoires automatisés basés sur une exécution symbolique dynamique.

MISE À JOUR pour 2019:

Comme mentionné dans les commentaires, Pex s'appelle désormais IntelliTest et est une fonctionnalité de Visual Studio Enterprise Edition. Il prend en charge l'émission de tests au format MSTest, MSTest V2, NUnit et xUnit et il est extensible afin que vous puissiez l'utiliser avec d'autres frameworks de test unitaire.

Mais soyez conscient des mises en garde suivantes:

  • Prend en charge uniquement le code C # qui cible le .NET Framework.
  • Ne prend pas en charge les configurations x64.
  • Disponible dans Visual Studio Enterprise Edition uniquement
32
Paul Batum

Je pense que la génération de tests unitaires ne sert à rien, en ce qui concerne TDD.

Vous ne faites des tests unitaires que pour être sûr que vous (en tant que développeur) êtes sur la bonne voie en ce qui concerne la conception et les spécifications. Une fois que vous commencez à générer des tests automatiquement, il perd cet objectif. Bien sûr, cela signifierait probablement une couverture de code à 100%, mais cette couverture serait insensée et vide.

Les tests unitaires automatisés signifient également que votre stratégie est test-après, ce qui est à l'opposé du principe test-before de TDD. Encore une fois, le TDD ne concerne pas les tests.

Cela étant dit, je pense que MSTest dispose d'un outil de génération automatique de tests unitaires - j'ai pu en utiliser un avec VS2005.

18
Jon Limjap

Mis à jour pour 2017:

Générateur de plaques de chaudière de test unitaire fonctionne pour VS 2015-2017 et est en cours de maintenance. Semble fonctionner comme annoncé.

16
N1ghtv1s1on

J'ai créé "ErrorUnit" et il génère des tests unitaires MSTest ou NUnit à partir de votre Visual Studio suspendu ou de vos journaux d'erreurs; Variables de classe moqueuses, paramètres de méthode et accès aux données EF jusqu'à présent. ( http://ErrorUnit.com )

Aucun générateur de test unitaire ne peut tout faire; Les tests unitaires sont classiquement séparés en trois parties Organiser, Agir et Affirmer; la partie Organiser est la plus grande partie d'un test unitaire et elle met en place toutes les conditions préalables à un test, en se moquant de toutes les données qui vont être traitées dans le test, la partie Acte d'un test unitaire est généralement une ligne et s'active la partie de code testée transmettant ces données, et enfin la partie Assert du test prend les résultats de la partie Act et vérifie qu'elle répond aux attentes (peut être zéro ligne en s'assurant simplement qu'il n'y a pas d'erreur).

Les générateurs de tests unitaires ne peuvent généralement faire que les parties "Organiser" et "Agir" lors de la création de tests unitaires; cependant, les générateurs de tests unitaires n'écrivent généralement pas de parties "Assert" car vous seul savez ce qui est correct et ce qui est incorrect pour vos besoins. Donc, une entrée/extension manuelle des tests unitaires est nécessaire pour être complet.

2
johng

Je suis d'accord avec Jon. Certains types de tests, comme les tests automatiques de fuzz, bénéficient certainement de la génération automatisée. Bien que vous puissiez utiliser les fonctionnalités d'un cadre de test unitaire pour ce faire, cela n'atteint pas les objectifs associés à une bonne couverture de test unitaire.

2
tshak

Parasoft .TEST a une fonctionnalité de génération de tests. Il utilise le cadre NUnit pour la description des tests et l'évaluation des assertions.

Il est possible de préparer une suite de tests de régression en générant automatiquement des scénarios (construction d'entrées et appel de la méthode testée) et en créant des assertions basées sur le comportement de base du code actuel. Plus tard, après l'évolution de la base de code sous tests, les assertions indiquent des régressions ou peuvent être facilement enregistrées à nouveau.

1
zuraff

Je sais que ce fil est vieux mais pour le bien de tous les développeurs, il existe une bonne bibliothèque appelée générateur de test unitaire:

https://visualstudiogallery.msdn.Microsoft.com/45208924-e7b0-45df-8cff-165b505a38d7

Bon dev

0
Bouam

GennyMcGenFace crée un test unitaire pour chaque fonction de votre classe et génère des objets avec des mots/valeurs aléatoires dans chaque paramètre.

  • Générez des tests unitaires pour chaque fonction de votre classe
  • Calcule les valeurs générées aléatoirement valides pour les entrées de paramètre et l'instruction de retour.
  • Les interfaces mockables renvoient des valeurs générées aléatoirement valides
  • Générez des tests unitaires pour chaque fonction de votre classe
  • Importe tous les espaces de noms nécessaires dans votre classe de test

Cela aide à configurer vos tests unitaires, en particulier si vous avez des objets d'entrée avec beaucoup de paramètres.

Le test unitaire ressemblera à ceci 

0

Il existe un produit commercial appelé AgitarOne (www.agitar.com) qui génère automatiquement des classes de test JUnit.
Je ne l'ai pas utilisé, je ne peux donc pas commenter son utilité, mais si je faisais un projet Java pour le moment, je le regarderais.

Je ne connais pas d'équivalent .net (Agitar en a fait annoncer une version .net mais AFAIK cela ne s'est jamais concrétisé).

0
Rikalous

J'ai utilisé NStub pour stuber le test de mes classes. Cela fonctionne assez bien.

0
Hector Sosa Jr

J'ai utilisé des outils pour générer des cas de test. Je pense que cela fonctionne bien pour les tests de plus haut niveau orientés vers l'utilisateur final. Des éléments qui font partie des tests d'acceptation des utilisateurs, plus que des tests unitaires purs.

J'utilise les outils de test unitaire pour ces tests d'acceptation. Ça marche bien.

Voir Outillage pour créer des cas de test .

0
S.Lott