Unit test di una libreria di database per scopi generali

-1

Molte lune fa ho creato una libreria di utilità che avvolge le librerie JDBC con classi che consentivano approcci in stile funzionale. Ho usato questa libreria per i miei scopi per molti anni. Ho sempre desiderato realizzare questo in un vero progetto open source. Ho iniziato a un certo punto e poi mi sono occupato della vita. Con le nuove funzionalità linguistiche di Java 8, sono ri-energizzato nel fare questo. So che gli RDBM non sono più belli (sì, sono un dinosauro), ma questo è parte del motivo per cui voglio togliermi dal petto. Penso inoltre che potrebbe essere possibile estendere le astrazioni ad altre tecnologie non RDBM.

Una cosa su cui mi sono bloccato è il modo giusto per creare test unitari per questo. Voglio davvero farlo in un primo tentativo, ma non sempre mi viene naturale, quindi sto cercando un consiglio.

Generalmente non considero il raggiungimento di un database per essere nel regno dei test unitari. Ma in questo caso, l'unica cosa che fa questa libreria è di avvolgere le interazioni con il database. Potrei fare una specie di configurazione di derisione e questo potrebbe aggiungere qualche valore, ma la (percepita) complessità di farlo è un po 'scoraggiante. La mia sensazione è che finirò per impantanarmi, annoiato e alla fine lo abbandonerò di nuovo. L'altro approccio che ho usato nel mio precedente attacco a questo era usare Apache Derby in modalità embedded. Ciò ha permesso che le cose fossero autonome e avrei potuto facilmente alzarmi in piedi e abbattere i test. Ci sono varie stranezze tra i database quando si tratta di JDBC, ma non penso che questo sia un problema qui. Parte di questo è il tentativo di normalizzare questo tipo di cose tanto quanto si può fare.

L'approccio all'uso del database incorporato ha senso per questo tipo di progetto? L'opzione di derisione è più facile di quanto pensassi. C'è un altro approccio che dovrei prendere in considerazione?

    
posta JimmyJames 25.04.2017 - 19:22
fonte

1 risposta

2

La sfida con il test di una libreria come questa sta isolando la parte che effettivamente fa la query. Non sono sicuro di come sia strutturata la tua applicazione, ma di solito cerco di testare tutto ciò che accade prima del codice effettivo del database. Detto questo, ci sono un paio di strumenti che potresti voler provare:

  • JOOQ : sembra che possa prendere in giro diversi dialetti di SQL. (Non ho usato questo, quindi non posso commentare su specifiche)
  • Basta usare un database associato a memoria SQLite3 o qualcosa di simile

L'idea è che vuoi che lo stato sia completamente resettato prima di ogni test unitario.

Se si dispone di un formato intermedio che viene utilizzato per assemblare la query finale, vorrei verificare che il formato intermedio sia impostato come previsto, quindi anche il testo della query risultante è come previsto. Lavora uno strato testabile alla volta.

    
risposta data 25.04.2017 - 19:35
fonte

Leggi altre domande sui tag