Come ri-eseguire lo stesso test con stessi dati in MbUnit
-
03-10-2019 - |
Domanda
Di ', ho il test seguente:
[Test]
public void MyTest( [RandomNumbers( Count=100, Minimum=0, Maximum=1000 )] int number )
{
...
}
E a un certo punto, durante il mio normale processo di compilazione, ha fallito. Ho ricevuto una notifica tramite posta elettronica e partii per indagare.
Ora, quando apro il test in Visual Studio e fare clic su "Test Run", che passa. Lo faccio di nuovo, e passa di nuovo. E di nuovo. E di nuovo. Ovviamente, il fallimento era legato a quella particolare sequenza di numeri casuali.
Quindi la domanda è:? Come faccio a eseguire nuovamente il test con quella esatta sequenza
(Purché abbia rapporto completo Gallio)
Aggiorna :
(A seguito di un commento sul fatto che sia una cattiva idea)
prima , sto in realtà non chiede se è una buona idea. La questione è diversa.
Secondo , quando il sistema in fase di sperimentazione è abbastanza complessa, e lo spazio dei dati di ingresso è di dimensioni multiple indipendenti, rompendo correttamente che lo spazio in equivalenza regioni presenta una sfida significativa in entrambe sforzo mentale e di tempo, che non è solo la pena, componenti più piccoli forniti del sistema sono già stati testati in proprio. Allo stesso tempo, se posso solo colpire il sistema di qua e di là, perché non farlo?
In terzo luogo , sono in realtà non è un novizio in questo settore. Ho sempre usato questa tecnica con altri framework di test (come csUnit e NUnit), e si è dimostrato un grande successo a prendere bug sottili. A quel tempo, non c'era concetti come dati generati, così abbiamo usato le nostre stampelle personalizzate, sotto forma di System.Random
con un seme predeterminato. Quel seme è stato generato come parte di inizializzazione del dispositivo (di solito basato sul tempo corrente) e scritto con cura per accedere. In questo modo, quando il test è fallito, ho potuto prendere il seme dal registro, collegarlo al dispositivo di prova, e ottenere esattamente lo stesso insieme di dati di test, e, quindi, esattamente lo stesso errore per eseguire il debug.
e quarta ??strong>, se si tratta di una cattiva idea, perché l'esistono RandomNumbers
fabbrica in primo luogo?
Soluzione
Non ci sono attualmente incorporato modo in Gallio / MbUnit per generare di nuovo la stessa sequenza di numeri casuali. Ma penso che questo potrebbe essere una funzione utile e ho aperto un problema per quella richiesta. ho intenzione di aggiornare la risposta soggetto quando è pronto.
Quello che vi propongo è il seguente:
- Visualizza il seme reale del generatore di numeri casuali interno come annotazione nella relazione di prova.
- esporre una proprietà
Seed
agli attributi[RandomNumbers]
e[RandomStrings]
, e ai generatori di dati fluenti pure.
Così si potrebbe facilmente ri-generare la stessa sequenza di valori alimentando il generatore con lo stesso numero di semi.
Aggiorna : questa funzione è ora disponibile in Gallio v3.3.8 e più tardi.
Ora siamo tutti d'accordo con quello che ha detto Peter. Utilizzando numeri casuali come input per i test unitari è raramente una buona idea. Il corollario è che si tratta di a volte e conveniente per lo più appropriata. E questo è esattamente il motivo per cui abbiamo deciso di implementare questa caratteristica in MbUnit. IMHO, uno scenario comune che potrebbe adattarsi bene con ingresso di test casuale è analisi stocastica su calcoli codice hash .