Diciamo che per esempio ha questa classe che genera numeri di Fibonacci:C#: come si verifica il metodo IEnumerable.GetEnumerator()?
public class FibonacciSequence : IEnumerable<ulong>
{
public IEnumerator<ulong> GetEnumerator()
{
var a = 0UL;
var b = 1UL;
var c = a + b;
while (true)
{
yield return c;
c = a + b;
a = b;
b = c;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Posso quindi scrivere un test che consente di verificare che i n primi numeri della sequenza sono corrette.
[Test]
public void GetEnumerator_FirstFifteenNumbers_AreCorrect()
{
var sequence = new FibonacciSequence().Take(15).ToArray();
CollectionAssert.AreEqual(sequence, new[] {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610});
}
Quando controllo per la copertura comunque, vedrò che il metodo IEnumerable.GetEnumerator() non è testato, e la mia copertura sarà inferiore a quello che ha davvero bisogno di essere. Giusto. Ma come dovrei testare quel metodo?
Come si gestisce di solito questo?
hmm, per curiosità come si controlla la copertura del test? Sembra una caratteristica interessante. – Ian
Sì, me lo sono chiesto anch'io, hehe. Ma trovato un pulsante per esso in TestDriven.Net, che è abbastanza impressionante a proposito. Se non l'hai provato, dovresti! Dopo averlo installato, puoi fare clic con il tasto destro sulla soluzione (in solution explorer) e selezionare Test con -> Copertura. Semplice :) – Svish
Se si dispone della versione di VS Team System, gli strumenti di test includono anche uno strumento di copertura, che può essere attivato con TestDriven.Net o nell'interfaccia regolare. Altrimenti, se utilizzi google strumenti di copertura di prova per Visual Studio, ce ne sono diversi là fuori. NCover potrebbe essere il più usato. – McMuttons