9
votes

Comment spécifier le masque de recherche correct pour la boîte de dialogue "Spécification du fichier de test" dans la définition de construction TFS2010?

Je ne sais pas comment spécifier le masque correct pour rechercher mes assemblages de test dans la définition de construction TFS2010. Je n'utilise pas de dossier binaires par défaut pour les assemblys de sortie. Chaque projet de test a son propre dossier de sortie Bin \ Debug ou Bin \ Living. Si j'utilise le masque par défaut ** \ * test * .dll Mes tests ont échoué avec cette erreur: xxx pré>

ceci est parce que ** \ * test * .dll masque trouvera plusieurs résultats pour le Même assemblage dans les dossiers Bin \ Debug et Obj \ Debug. P>

J'ai essayé de changer ce masque pour exclure le dossier Obj \ débogé et utiliser uniquement la corbeille: P>

To - testAssemblies
From - testAssemblies.Where(Function(o) Not o.Contains("\obj\")).ToList()


1 commentaires

Oui, a également dû recourir à l'utilisation de FindMatchingfiles et d'une activité d'attribution.


5 Réponses :


4
votes

L'activité de construction qui vous intéresse est nommée "Rechercher des assemblages de test": Entrez la description de l'image ici

Donc, ce que vous placez à la définition de construction est concaténé après la variable de script de construction sortiedirectory .

Ce de sortieDirectory est initialisé pour chaque configuration dans l'activité "Initialiser la sortieDirectory": Entrez la description de l'image ici

Vous pouvez faire la queue une nouvelle version où vous définissez votre «Verbosité de journalisation» égale à Diagnostic . Une fois que cela a couru (et échoué), vérifiez ce qui se passe avec votre construction.

Je suppose que vous avez des problèmes avec vos paramètres de configuration / de plate-forme, mais sans entrée de béton qui devine simplement.


1 commentaires

Tu as raison. La collection Testassemples est remplie par «Rechercher des assemblages de test». J'ai une activité foreach après cette activité pour enregistrer le contenu de la collection TestStassemblies. Si j'utilise ** testez .dll masque, le résultat est correct, mais avec des ensembles de test en double des dossiers bin et obj. J'ai essayé de le filtrer en utilisant des masques différents, mais il semble que j'utilise un mauvais masque. La collection Testassemblies était toujours vide. Je peux le filtrer dans le code comme solution de contournement ...



0
votes

Probablement le ** au début de votre filtre est le problème. Le point de départ de la recherche est à un endroit où vous ne vous attendriez pas à ce que ce soit et que les sous-répertoires ne contiennent pas vos fichiers de test.

Pour résoudre ce problème, veuillez ajouter .. \ \ \ \ au début de votre expression de filtre. À des fins de débogage, cela sera sorti de la structure de sous-réception et effectuez une recherche plus large de votre système pour les fichiers de test. Vous pouvez également faire la première partie absolue, afin de vous assurer que vous recherchez dans les sous-arbres du répertoire de droite.

Aussi alternative, vous pouvez également exécuter un Session ProcessMonitor sur votre système de construction Pour voir où votre moteur de construction TFS recherche réellement vos assemblages de test. Ou effectuer une journalisation dans le flux de travail de construction / activité elle-même.

Lorsque vous avez trouvé le problème, définissez à nouveau votre fenêtre de recherche pour ne pas rechercher des structures de sous-répertoire non pertinentes.


3 commentaires

Je l'ai essayé mais les résultats sont toujours les mêmes. J'ai changé de masque de recherche à ".. \ .. \ \ ** \. \. Unitests.dll". Des ensembles de test supplémentaires ont été trouvés à partir d'autres constructions. Ensuite, j'ai changé de masque de recherche sur "" .. \ \ \ \ \ ** \ bin \ ** \. UnitestS.dll "et aucun des assemblages de test n'a été trouvé.


Pouvez-vous alors essayer avec le moniteur de processus en cours d'exécution sur votre système de construction. Je suis curieux où il cherche vos fichiers. Et veuillez poster la partie de la structure de sous-répertoire que vos assemblages de test sont dans. Nous pourrions peut-être découvrir pourquoi votre motif ne correspond pas.


Ajout à cette réponse car il m'a fallu un certain temps pour savoir quel processus surveiller réellement - c'est tfsbuildservicehost.exe .



1
votes

J'ai rencontré fondamentalement le même problème que vous avez. J'ai des développeurs à l'aide d'un assemblage de test d'assistance (Testhelper) et d'un dossier Webbli-Webublié qui causait ce problème.

Ce que j'ai fini par faire pour résoudre ce problème, résout le problème de l'obtention de multiples dll de test transmis à Mstest. "Eh bien, c'est ce que j'essaie de faire avec mon masque", vous pouvez penser! J'ai essayé cette même solution mais je suis venu vide.

J'ai écrit une tâche personnalisée et l'a insérée après que le processus de construction trouve les ensembles de test. Voici le code de la tâche personnalisée: xxx

Vous l'inséreriez après la tâche "Rechercher des assemblages de test".


3 commentaires

Salut Mike. J'utilise Attribuer une activité après la recherche de FindMatchingFiles avec la requête LINQ pour filtrer les résultats de FindMatchingFiles. J'ai ajouté une section de contournement à ma question.


Ok, c'est fondamentalement ce que je fais ici. Je fais juste un peu plus d'ingénierie. Je vérifie les noms de fichiers et pas le chemin complet. Je publie également un peu d'informations "débogage". Je suis heureux de venir à la même conclusion. Me fait me sentir mieux à propos de cette méthode!


J'ai écrit un programme qui vous permet de tester votre SearchPatterns contre FindMatchingFiles et de l'avoir posté sur ce fil: Stackoverflow.com/Questtions/4524910/...



1
votes

J'utilise toujours une activité FindMatchingFiles, mais je devais ajouter une activité d'attribution avec les paramètres suivants:

Testassemblies De - Testassemblies.Où (fonction (O) non O.Contains ("\ obj \"))) Tolist () Je filtrant tous les ensembles de test trouvés dans les dossiers "Obj" de cette façon.


0 commentaires

0
votes

J'ai rencontré ce problème, mais j'ai constaté que des doublons plutôt que de bin et de l'OBJ contenant des doublons, j'avais de nombreuses copies des mêmes dll apparaissant dans divers dossiers de projet.

La réponse de Ludwo avec Attribuer était presque Assez pour le réparer, mais pour ma situation, j'avais besoin d'une valeur plus générale pour le paramètre à partir de . Ce VB regroupe les chemins de fichiers découverts par nom de fichier, puis choisit le premier chemin de chaque groupe. Bien sûr, il ne travaillera que si et seulement si chaque nom de fichier correspond à une DLL logique: xxx


0 commentaires