Comment définir la séquence de cas de test dans xUnit

J’ai écrit les cas de test xUnit en C #. Cette classe de test contient tellement de méthodes. Je dois exécuter tous les cas de test dans une séquence. Comment définir la séquence de tests élémentaires dans xUnit?

Dans xUnit 2. *, ceci peut être réalisé à l’aide de l’atsortingbut TestCaseOrderer pour désigner une stratégie de commande, qui peut être utilisée pour référencer un atsortingbut annoté sur chaque test pour indiquer une commande.

Par exemple:

Stratégie de commande

 public class PriorityOrderer : ITestCaseOrderer { public IEnumerable OrderTestCases(IEnumerable testCases) where TTestCase : ITestCase { var sortedMethods = new SortedDictionary>(); foreach (TTestCase testCase in testCases) { int priority = 0; foreach (IAtsortingbuteInfo attr in testCase.TestMethod.Method.GetCustomAtsortingbutes((typeof(TestPriorityAtsortingbute).AssemblyQualifiedName))) priority = attr.GetNamedArgument("Priority"); GetOrCreate(sortedMethods, priority).Add(testCase); } foreach (var list in sortedMethods.Keys.Select(priority => sortedMethods[priority])) { list.Sort((x, y) => SsortingngComparer.OrdinalIgnoreCase.Compare(x.TestMethod.Method.Name, y.TestMethod.Method.Name)); foreach (TTestCase testCase in list) yield return testCase; } } static TValue GetOrCreate(IDictionary dictionary, TKey key) where TValue : new() { TValue result; if (dictionary.TryGetValue(key, out result)) return result; result = new TValue(); dictionary[key] = result; return result; } } 

Atsortingbut

 [AtsortingbuteUsage(AtsortingbuteTargets.Method, AllowMultiple = false)] public class TestPriorityAtsortingbute : Atsortingbute { public TestPriorityAtsortingbute(int priority) { Priority = priority; } public int Priority { get; private set; } } 

Cas de test

 [TestCaseOrderer("FullNameOfOrderStrategyHere", "OrderStrategyAssemblyName")] public class PriorityOrderExamples { [Fact, TestPriority(5)] public void Test3() { //called third } [Fact, TestPriority(0)] public void Test2() { //called second } [Fact, TestPriority(-5)] public void Test1() { // called first } } 

xUnit 2. * commander des échantillons ici

Testpriority: au bas de cette page.

 [PrioritizedFixture] public class MyTests { [Fact, TestPriority(1)] public void FirstTest() { // Test code here is always run first } [Fact, TestPriority(2)] public void SeccondTest() { // Test code here is run second } } 

BTW, j’ai le même problème en ce moment. Et oui, ce n’est pas du pur art .. mais QA voulait un test manuel .. donc un test automatisé avec une commande spécifique est déjà un grand pas en avant pour eux .. (toux) et oui, ce n’est pas vraiment un test unitaire ..

Vous ne pouvez pas, par conception. C’est délibérément aléatoire afin d’empêcher quiconque d’obtenir l’un de ceux-ci, que ce soit par désir ou par accident.

Le caractère aléatoire n’est valable que pour une classe de test donnée. Vous pouvez donc atteindre vos objectives en encapsulant les éléments que vous souhaitez contrôler dans une classe nestede. Dans ce cas, vous obtiendrez quand même un ordre aléatoire chaque avoir plus de deux méthodes de test dans une classe.

Si vous essayez de gérer la construction des fixtures ou du contexte, le mécanisme IUseFixture peut être approprié. Voir la feuille de tracés xUnit pour des exemples.

Mais vous devez vraiment nous en dire plus sur ce que vous essayez de faire, sinon nous devrons simplement spéculer.