Cependant, j'ai trouvé que même si 400 de ces tests peuvent être exécutés (dans l'ordre), certains tests peuvent soit bloquer le runner xUnit, soit le désactiver complètement.
Je ne attention si certains tests ne peuvent pas s'exécuter sur Linux, certains tests sont à faire avec le DTC et certains gumph non gérés que nous n'avons pas besoin de prendre en charge là-bas.
Ce que je veux cependant, c'est appliquer un ignorer à ces tests, et avoir le fait que le test a été ignoré marqué correctement dans la sortie de la construction.
La question peut se résumer à, je suppose, un certain nombre de solutions possibles
Si je pouvais éviter de trop modifier le code d'origine, ce serait génial, car le code n'est pas vraiment le mien à changer, et appliquer beaucoup de hacks multiplateformes ne descendra probablement pas trop bien.
J'éviterais d'externaliser les tests de saut (c'est-à-dire un fichier de configuration/commande si c'est possible). Cela va un peu à l'encontre de rendre les tests faciles à exécuter et fiables. Ignorer les tests dans le code est l'approche la plus sûre lorsque d'autres personnes commencent à s'impliquer.
Je pourrais voir un certain nombre d'options, voici deux qui impliquent la modification du code existant.
Dans la solution VS, définissez une autre configuration qui définit un indicateur de précompilateur MONOWIN
(juste pour que ce soit explicitement un indicateur qui indique qu'il s'agit d'un code compilé sur Windows pour une utilisation sur Mono).
Définissez ensuite un attribut qui rendra le test ignoré lors de la compilation pour Mono:
public class IgnoreOnMonoFactAttribute : FactAttribute {
#if MONOWIN
public IgnoreOnMonoFactAttribute() {
Skip = "Ignored on Mono";
}
#endif
}
Il est en fait difficile de trouver des avantages à cette méthode car elle implique de se moquer de la solution d'origine et ajoute une autre confiration qui doit être prise en charge.
Voici une solution similaire à l'option 1, sauf qu'aucune configuration distincte n'est requise:
public class IgnoreOnMonoFactAttribute : FactAttribute {
public IgnoreOnMonoFactAttribute() {
if(IsRunningOnMono()) {
Skip = "Ignored on Mono";
}
}
/// <summary>
/// Determine if runtime is Mono.
/// Taken from http://stackoverflow.com/questions/721161
/// </summary>
/// <returns>True if being executed in Mono, false otherwise.</returns>
public static bool IsRunningOnMono() {
return Type.GetType("Mono.Runtime") != null;
}
}
xUnit runner exécutera une méthode deux fois si elle est marquée avec [Fact]
et [IgnoreOnMonoFact]
. (CodeRush ne fait pas cela, dans ce cas, je suppose que xUnit est correct). Cela signifie que toutes les méthodes de test doivent avoir [Fact]
Remplacé par [IgnoreOnMonoFact]
Le lanceur de test CodeRush a toujours exécuté le test [IgnoreOnMonoFact]
, Mais il n'a pas ignoré le test [Fact(Skip="reason")]
. Je suppose que cela est dû au fait que CodeRush reflète xUnit et ne l'exécute pas réellement à l'aide des bibliothèques xUnit. Cela fonctionne très bien avec le runner xUnit.
XUnit v2.0 est maintenant disponible. Les tests désactivables sont directement pris en charge par celui-ci. Utilisation:
[Fact (Skip = "specific reason")]
Il y a maintenant de nouvelles options.
Ajouter un package Nuget SkippableFact , qui vous permet d'utiliser [SkippableFact]
au lieu de [Fact]
et vous pouvez utiliser Skip.<xyz>
dans un test pour ignorer dynamiquement le test pendant l'exécution.
Exemple:
[SkippableFact]
public void SomeTestForWindowsOnly()
{
Skip.IfNot(Environment.IsWindows);
// Test Windows only functionality.
}
Ceci est maintenant résolu en 1.8 - vous pouvez filtrer les Traits. Voir ceci journal des problèmes .
Mise à jour: les traits fonctionnent avec le runner de la console mais pas avec MSBuild, j'ai ajouté une demande de fonctionnalité pour ce support.
Ce serait une utilisation idéale des traits, mais malheureusement, ni la ligne de commande ni le fichier de projet xml ne prennent en charge le filtrage basé sur les traits. Cela vaudrait la peine d'ajouter un problème au site codeplex pour cela.