J'ai écrit quelques algorithmes de tri pour une affectation de classe et j'ai également écrit quelques tests pour m'assurer que les algorithmes ont été correctement implémentés. Mes tests ne font que 10 lignes et il y en a 3 mais seulement 1 ligne change entre les 3 donc il y a beaucoup de code répété. Est-il préférable de refactoriser ce code dans une autre méthode qui est ensuite appelée à partir de chaque test? Ne devrais-je pas alors écrire un autre test pour tester le refactoring? Certaines variables peuvent même être déplacées au niveau de la classe. Les classes et méthodes de test doivent-elles suivre les mêmes règles que les classes / méthodes normales?
Voici un exemple:
[TestMethod]
public void MergeSortAssertArrayIsSorted()
{
int[] a = new int[1000];
Random rand = new Random(DateTime.Now.Millisecond);
for(int i = 0; i < a.Length; i++)
{
a[i] = rand.Next(Int16.MaxValue);
}
int[] b = new int[1000];
a.CopyTo(b, 0);
List<int> temp = b.ToList();
temp.Sort();
b = temp.ToArray();
MergeSort merge = new MergeSort();
merge.mergeSort(a, 0, a.Length - 1);
CollectionAssert.AreEqual(a, b);
}
[TestMethod]
public void InsertionSortAssertArrayIsSorted()
{
int[] a = new int[1000];
Random rand = new Random(DateTime.Now.Millisecond);
for (int i = 0; i < a.Length; i++)
{
a[i] = rand.Next(Int16.MaxValue);
}
int[] b = new int[1000];
a.CopyTo(b, 0);
List<int> temp = b.ToList();
temp.Sort();
b = temp.ToArray();
InsertionSort merge = new InsertionSort();
merge.insertionSort(a);
CollectionAssert.AreEqual(a, b);
}