Sto lavorando con il seguente sistema:
Network Data Feed -> Third Party Nio Library -> My Objects via adapter pattern
Di recente abbiamo avuto un problema in cui ho aggiornato la versione della libreria che stavo usando, che, tra le altre cose, ha causato i timestamp (che la libreria di terze parti restituisce come long
), essere cambiati da millisecondi dopo l'epoca a nanosecondi dopo l'epoca.
Il problema:
Se scrivo test che deridono gli oggetti della libreria di terze parti, il mio test sarà errato se ho fatto un errore sugli oggetti della libreria di terze parti. Ad esempio, non mi rendevo conto che i timestamp hanno cambiato la precisione, il che ha comportato la necessità di cambiare il test unitario, perché il mio mock ha restituito dati errati. Questo non è un bug nella libreria , è successo perché ho perso qualcosa nella documentazione.
Il problema è che non posso essere sicuro dei dati contenuti in queste strutture dati perché non posso generare quelli reali senza un feed di dati reale. Questi oggetti sono grandi e complicati e contengono molti dati diversi. La documentazione per la libreria di terze parti è scadente.
La domanda:
Come posso impostare i miei test per testare questo comportamento? Non sono sicuro di poter risolvere questo problema in un test unitario, poiché il test stesso può essere facilmente errato. Inoltre, il sistema integrato è ampio e complicato ed è facile perdere qualcosa. Ad esempio, nella situazione sopra, avevo corretto correttamente la gestione del timestamp in diversi punti, ma ne ho perso uno. Il sistema sembrava fare principalmente le cose giuste nel mio test di integrazione, ma quando l'ho distribuito alla produzione (che ha molti più dati), il problema è diventato evidente.
Non ho un processo per i miei test di integrazione in questo momento. Il test è essenzialmente: prova a mantenere buoni i test unitari, aggiungi altri test quando le cose si rompono, quindi distribuiscile sul mio server di test e assicurati che le cose sembrino sane, quindi distribuiscile alla produzione. Questo problema di data e ora ha superato i test unitari perché le beffe sono state create in modo errato, quindi ha superato il test di integrazione perché non ha causato problemi immediati e immediati. Non ho un dipartimento di controllo qualità.
Timestamp
classe (che contiene alcuna dichiarazione che vogliono) e di fornire metodi chiamati ( .seconds()
, .milliseconds()
, .microseconds()
, .nanoseconds()
) e dei costruttori naturalmente con nome. Quindi non ci sarebbero stati problemi.