Sto provando a scrivere test di integrazione per un'app client-server. L'app client viene eseguita sul computer dell'utente e si connette all'app del server in esecuzione su uno specifico server Windows, network-serverA
. L'app del server accede anche ai file su un server di rete diverso, network-serverB
.
In questo post , l'autore afferma che i test di integrazione sono più importanti della scrittura dei test unitari. Inoltre, nel libro Code Complete 2, Steve McConnel afferma che è meglio scrivere i test in anticipo piuttosto che dopo.
Nel mio caso, per ottenere veri test di integrazione, dovrei avviare due server di rete in VM o semplicemente simularlo in qualche modo. Per quanto riguarda ciò ho fatto qualche ricerca per capire come implementarlo, e queste sono le poche opzioni si avvicinò per simulare i server di rete:
-
Utilizza la condivisione file Windows predefinita ( link ). Il vantaggio di questo metodo è che è molto facile da configurare per me. Lo svantaggio di questo metodo è che dovrei fare questi passaggi in uno script automatico.
Passi:
a. cambia il nome del computer dell'utente in "FileServerName", in modo che il programma possa accedervi tramite
\FileServerName
b. condividi una cartella nella directory corrente
c. cambia il nome del computer dell'utente allo stato precedente.
-
Usa FreeNAS installato come VM su VirtualBox e mappalo su una determinata unità nome per abbinare il file server di produzione attuale: link
Passi:
a. imposta FreeNAS come file server sotto virtualBox
b. cambia il nome di FreeNAS in modo tale che i file siano accessibili tramite
\FilServerName
c. avvia FreeNAS come file server e distribuisci file da
\FileServerName
d. spegnere FreeNAS VM
-
Esegui un contenitore Docker sia per
network-serverA
chenetwork-serverB
. Innetwork-serverA
esegui un file server che serve i file come \ FileNameServer e innetwork-serverB
esegue un'istanza ipython. La sfida in questa configurazione è che è versatile, ma richiede anche più conoscenze di quelle disponibili a questo punto. -
Utilizzando Python, crea un'interfaccia di rete virtuale, crea un nome per tale interfaccia di rete virtuale in modo che sia accessibile a
\FileServerName
e accedici normalmente.
Tutte queste opzioni richiedono alcuni costi iniziali e compromessi. L'avvio di un server FreeNAS o di un contenitore Docker probabilmente simula meglio i veri test di integrazione, ma ha anche costi di installazione più elevati, nel senso che dovrei passare un settimana o giù di lì per capire. D'altra parte, usare solo la condivisione di file di Windows è più economico da configurare, ma se arriva qualcun altro domani e vuole testarlo, non è facilmente trasferibile a quello sviluppatore.
Quando si avvia un progetto e si utilizzano i framework TDD, PseudoCoding (da Code Complete 2), in genere si scrivono i test di integrazione (impostazione dell'accesso al database / file server) prima di scrivere un singolo pezzo di codice?
O dovrei dimenticare per ora i test di integrazione, scrivere le classi di alto livello, le funzioni per implementare i requisiti e scrivere test unitari per queste funzioni, creare funzioni che possono essere testate? Una volta eseguiti i test delle unità, posso tornare e scrivere i test di integrazione?