In una risposta a un'altra domanda , Ho suggerito di creare un valore randomizzato per l'input su un metodo specifico. Nella mia esperienza questo è stato utile per rendere i test più leggibili e consente di saltare la "fase banale" in cui si codificano i risultati specifici in un metodo.
Ecco il codice del test unitario incollato dall'altra risposta, per un rapido riferimento:
[Test]
public void FullHouseReturnsTrue()
{
var roll = AnyFullHouse();
Assert.That(sut.IsFullHouse(roll));
}
[Test]
public void StraightReturnsFalse()
{
var roll = AnyStraight();
Assert.That(sut.IsFullHouse(roll), Is.False);
}
Un paio di commenti in risposta suggerivano che questa strategia non avrebbe funzionato bene, perché il anche il metodo di supporto dovrebbe essere testato. Nella mia esperienza, non ho mai avuto bisogno di testare metodi come questo, poiché la creazione del codice di produzione corrispondente verifica anche il mio codice di test.
Do AnyStraight()
e AnyFullHouse()
devono avere i propri test unitari? Se sì, come risolvi il problema di gallina e uova che presenta?
Modifica
Vorrei ancora creare test unitari dedicati per l'algoritmo AnyFullHouse
se ho delineato il metodo?
[Test]
public void FullHouseReturnsTrue()
{
var roll = listOfHardCodedFullHouseRolls[_random.Next(0, listOfHardCodedFullHouseRolls.Length)];
Assert.That(sut.IsFullHouse(roll));
}