Ho scritto alcuni algoritmi di ordinamento per un compito di classe e ho anche scritto alcuni test per assicurarmi che gli algoritmi fossero implementati correttamente. I miei test sono lunghi solo 10 righe e ce ne sono 3 ma solo 1 riga cambia tra i 3 quindi c'è un sacco di codice ripetuto. È meglio refactoring questo codice in un altro metodo che viene poi chiamato da ogni test? Non dovrei quindi scrivere un altro test per testare il refactoring? Alcune delle variabili possono anche essere spostate fino al livello di classe. Il test di classi e metodi dovrebbe seguire le stesse regole delle classi / metodi regolari?
Ecco un esempio:
[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);
}