Ich habe einige Sortieralgorithmen für eine Klassenzuweisung geschrieben und einige Tests geschrieben, um sicherzustellen, dass die Algorithmen korrekt implementiert wurden. Meine Tests sind nur 10 Zeilen lang und es gibt 3 davon, aber nur 1 Zeile wechselt zwischen den 3, so dass es viel wiederholten Code gibt. Ist es besser, diesen Code in eine andere Methode umzugestalten, die dann von jedem Test aufgerufen wird? Müsste ich dann nicht einen weiteren Test schreiben, um das Refactoring zu testen? Einige der Variablen können sogar auf Klassenebene verschoben werden. Sollten Testklassen und -methoden denselben Regeln folgen wie reguläre Klassen / Methoden?
Hier ist ein Beispiel:
[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);
}