Sono in procinto di aggiungere test unitari a un progetto a cui sto lavorando al lavoro e mi è stato suggerito di utilizzare VM per popolare il database con dati validi. Questo è stato suggerito come alternativa a quello che faccio di solito, che utilizza il file di fixture yaml per caricare i dati. Mentre penso che l'utilizzo di una VM per il database di test delle unità potrebbe avere alcuni vantaggi, nel complesso non la vedo come una soluzione eccezionale.
La prima preoccupazione che ho è la velocità dei test in esecuzione. Non so quanto tempo ci vorrà per far apparire e abbattere una nuova istanza VM basata su un'istantanea, ma la mia ipotesi è che sarebbe più lungo per gli inserimenti di dati che fanno i file di dati yaml. I test unitari dovrebbero essere eseguiti il più velocemente possibile perché dovrebbero essere eseguiti almeno una volta prima di ogni push al repository di controllo della versione e ciò può accadere diverse volte al giorno (anche di più quando si trova in modalità bug fixing).
La prossima preoccupazione è avere i dati in uno stato noto per tutti i test. Certo, il primo test che viene eseguito sul database della VM saprà in quale stato si trova il database una volta che un test ha modificato i dati, che potrebbero rovinare gli altri test. Con i file di dati di yaml fixture, ogni test è garantito per sapere in quale stato si trova il database.
L'ultima preoccupazione principale è la complessità che potrebbe comportare l'installazione di una macchina virtuale (ovviamente potrei sbagliarmi dato che non ho mai avuto una configurazione come questa prima). Ovviamente non possiamo semplicemente eseguire phpunit con l'utilizzo di VMs nel setup. Per prima cosa dovremmo creare uno script che fondamentalmente crea ed elimina la VM. Questo dovrebbe funzionare su tutti i sistemi operativi o dovremmo costringere tutti a lavorare in un ambiente VM (e l'esecuzione di una VM all'interno di una VM sembra che sarà davvero ancora più lenta).
Il suggerimento VM era di combattere il problema della gestione dei file di dati di yaml fixture, ma a me sembra che gestire il file yaml sia la più facile delle due opzioni.
Qualcuno ha mai lavorato in un ambiente in cui gli sviluppatori avrebbero utilizzato le VM per il database che richiedevano e testavano l'unità (o test di integrazione o qualsiasi altra cosa si voglia chiamare)?