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 le 3, quindi c'è un sacco di codice ripetuto. È meglio convertire questo codice in un altro metodo che viene quindi chiamato da ciascun test? Non avrei quindi bisogno di scrivere un altro test per testare il refactoring? Alcune delle variabili possono anche essere spostate al livello di classe. Le classi e i metodi di prova dovrebbero 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);
}