Recentemente ho scoperto gmock e sono ora in procinto di "ripensare l'intero processo di programmazione così com'è", aggiungendo i test unitari ovunque io sia possibile. Una cosa che mi è sembrata strana nel processo è che il modulo QSql è chiaramente una dipendenza esterna dal nostro codice, non offre agli sviluppatori strumenti per deridere i suoi interni. La cosa migliore che posso pensare con questo modulo è il DB in memoria, che è molto più difficile da implementare di un semplice mock e non è nemmeno sempre possibile (considerare la possibilità di creare pacchetti oracle con DB in memoria)C'è un modo per deridere QSqlQuery?
Ora, per me , non è esattamente un problema, un po 'di tempo fa siamo passati al wrapper ocilib home grown che eredita dall'interfaccia virtuale (ed è, quindi, facilmente raggibile). Ma davvero, non c'è modo di deridere quando usi il modulo QSql di Qt? O meglio: se si tratta di un framework (veramente buono), non forniscono veramente automazione per casi di questo tipo o mi manca qualcosa?
UPD1: Un piccolo aggiornamento sulla importanza della questione:
mio codice è molto pesantemente interleaved con le query SQL di Oracle come, per alcuni, il codice di un sacco di altre persone. L'unità che verifica un tale codice è praticamente impossibile quando una dipendenza esterna, anch'essa molto sviluppata, a volte fornisce dati non corretti. Quando il tuo test unitario si interrompe, vuoi che sia il tuo codice che è in errore, non Oracle. Ecco perché ho fatto la domanda originale. Se esiste/esiste un modo per simulare facilmente la dipendenza usando l'interfaccia qsqlquery, allora è possibile scrivere test unitari per il codice usando QSql.
UPD2: Anche se, dopo un'ulteriore considerazione, devo ammettere che il problema potrebbe essere evitato con una migliore progettazione del codice (OO invece di funzioni libere in alcuni punti) e una migliore separazione delle entità. Quindi, praticamente impossibile in UPD1 non era veramente giustificato. Anche se questo non rende la domanda originale meno importante. Quando hai il compito di mantenere il codice legacy, ad esempio, il mocking QtSql è l'unico modo realistico di introdurre test sul sistema.
È possibile provare a implementare il proprio driver sql falso, in cui è possibile implementare le funzioni di verifica. – Milovidov
beh, non è molto facile da usare, non è così? :) Mi aspetterei che un driver falso sia già pronto per il riutilizzo di ppl – Zeks
Cosa c'è di peggio, se vuoi simulare un driver dovrai inevitabilmente imparare esattamente , quando e come viene chiamato da qsqlquery, perché altrimenti non sarai in grado di falsificare correttamente le chiamate ad esso – Zeks