sono coinvolto con un progetto che deve, tra le altre cose, che controllano i vari strumenti di laboratorio (robot, lettori, ecc ...)codice Unit-test con dipendenze esterne imprevedibili
La maggior parte di questi strumenti sono controllate sia attraverso Driver basati su DCOM, porta seriale o avvio di programmi proprietari con vari argomenti. Alcuni di questi programmi o driver includono la modalità di simulazione, altri no. Ovviamente, il mio computer di sviluppo non può essere collegato a tutti gli strumenti, e mentre posso avviare macchine virtuali per gli strumenti i cui driver includono una modalità di simulazione, alcune cose non possono essere testate senza lo strumento vero e proprio.
Ora, il mio codice non riguarda principalmente le operazioni effettive sugli strumenti, ma le operazioni di avvio, assicurandosi che tutto funzioni correttamente e la sincronizzazione tra di esse. È scritto in Java, usando varie librerie per interfacciarsi con gli strumenti e i loro driver.
Desidero scrivere test di unità per i vari moduli di controllo dello strumento. Tuttavia, poiché gli strumenti possono fallire in molti modi (alcuni dei quali sono documentati, alcuni dei quali non lo sono), perché il codice dipende da questi output parzialmente casuali, sono un po 'perso riguardo a come scrivere test unitari per queste parti di il mio codice Ho considerato le seguenti soluzioni:
- unico test con strumenti reali, connessi, forse il metodo più accurato, ma non è affatto pratico (piastra di inserto lettore, eseguire test di unità, rimuovere la piastra, eseguire test di unità, ecc ...), per non parlare di potenzialmente pericoloso,
- utilizzare un oggetto fittizio per simulare la parte che effettivamente comunica con la cosa; mentre questo è sicuramente più facile da implementare (e funzionare), potrebbe non essere in grado di riprodurre l'intera gamma di potenziali guasti (come già detto, molto è non documentata, che a volte può causare brutte sorprese)
Mentre Attualmente sto pensando di andare con quest'ultimo, mi manchi qualcosa? C'è un modo migliore per farlo?
Test delle unità: ho già effettuato la compilazione automatica e il test delle unità per la maggior parte del progetto (in gran parte si tratta di memorizzare/convertire/trasmettere i dati dagli strumenti in modo sicuro). Tuttavia, per testare correttamente il codice di controllo degli strumenti, probabilmente ci vorrà molto più tempo per l'esecuzione, poiché alcune delle condizioni di errore coinvolgono timeout (che, concesso, possono essere portati a un valore ragionevole durante il test). Ma per la parte di integrazione, è più difficile e non può essere automatizzato in alcuni casi, poiché comporta la manipolazione fisica degli strumenti (ad esempio l'aggiunta di una piastra) –