Con un numero ampio ma limitato di casi di test Test basati sui dati è la risposta.
... testing done using a table of conditions directly as test inputs and verifiable outputs as well as the process where test environment settings and control are not hard-coded. In the simplest form the tester supplies the inputs from a row in the table and expects the outputs which occur in the same row. The table typically contains values which correspond to boundary or partition input spaces.
Hai bisogno di 1 test esplicito in cui tutte le condizioni sono vere dicendo "funziona".
Utilizzando un test guidato dai dati, puoi testare tutti i valori "falsi" parametrizzando ogni campo booleano come input per il test.
Il modo in cui lo fai dipende dallo stack tecnologico e dal framework di test unitario, ma potrebbe essere ridotto a un metodo di test e a un loop che itera sugli input previsti (esempio in C #, framework MS Test):
[TestClass]
public class ShipTests
{
[TestMethod]
public void ItWorks()
{
var ship = new SpaceShip(true, true, true, true, true);
Assert.IsTrue(ship.isShipAvailable());
}
[TestMethod]
public void ItDoesntWork()
{
var inputs = new bool[][]
{
{ false, true, true, true, true },
{ false, false, true, true, true },
// ...
{ false, false, false, false, false },
};
foreach (var row in inputs)
{
var ship = new SpaceShip(row[0], row[1], row[2], row[3], row[4]);
Assert.IsFalse(ship.isShipAvailable());
}
}
}
Robert Harvey ha commentato la domanda:
That said, if you really want tests for this, I think one test with all flags true and one test with one of the flags false really ought to suffice.
Non è sufficiente, poiché ogni flag falso fa sì che la nave non sia disponibile. Non si desidera verificare che l'unità di curvatura non sia disponibile e che tutti i test vengano superati se un difetto causa la disattivazione imprevista del condensatore di flusso.
Il condensatore di flusso è importante, lo sai. Molto importante. Deve essere online indipendentemente da cosa - anche più di Facebook!
Otherwise, there's 5 flags here; a fully comprehensive test would require 32 test permutations.
Sì, ci sono un gran numero di casi di test, ma il lavoro richiesto per mantenere quei test è minimo se si utilizza un test guidato dai dati. E se questa è tutta la manipolazione dei dati in memoria, il tempo di esecuzione del test è trascurabile. Penso di aver dedicato più tempo a scrivere questa risposta rispetto a tutti gli sviluppatori del team che trascorreranno questi test nel corso della vita del progetto.