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 , se si tratta di una cattiva idea, perché l'esistono RandomNumbers fabbrica in primo luogo?

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top