Recentemente ho fatto una domanda sulla progettazione e ho ricevuto suggerimenti su come strutturare il mio codice. Sto ancora lavorando al design quindi ho solo uno pseudo codice, ma questo era quello che avevo in mente.
class TableManager()
{
int init(DBManager manager, String name)
{
this.name = name
this.manager = manager
}
int add_thing(Thing thing)
{
try {
manager.cursor.execute("INSERT INTO %s, (%s)) % (this.name, thing)
return 1
} catch {
return -1;
}
}
Inizialmente ho pensato che avresti annullato questa operazione inizializzando TableManager nel setup più semplice passandogli un DBManager connesso a localhost e "TEST_TABLE" come argomento del nome.
Quindi chiameresti add_thing con vari stati della tabella. Ad esempio, il primo test chiamerebbe add_thing con una tabella inizialmente vuota. L'unittest controllerebbe quindi lo stato di TEST_TABLE per assicurarsi che la cosa aggiunta fosse nella tabella.
Sono considerati test di integrazione o test di unità?
Qualcuno ha menzionato l'utilizzo di un MockDatabase per testare il gestore di tabelle. Non vedo cosa potrebbe fare? È possibile creare un MockDatabase che restituisce true quando viene chiamato execute, ma non vedo come questo testerebbe la funzionalità di add_thing senza avere effettivamente un database per assicurarsi che l'elemento sia stato aggiunto con successo.