Ho utilizzato Test Driven Development in un'app Seaside con cui ho giocato e tutti i miei dati sono archiviati come oggetti nell'immagine (al contrario di un database).Dispositivi di prova o equivalenti per i dati di prova con Smalltalk Seaside?
Così, quando ho eseguito i miei test ho dovuto fare attenzione a riporre i dati reali prima che venga cestinato con dati di test, in questo modo:
ToDoTest>>setUp
savedTasks := Task tasklist.
Task deleteAllTasks.
savedProjects := ToDoProject projectlist.
ToDoProject deleteAllProjects.
savedPeople := Person peoplelist.
Person deleteAllPeople.
E:
ToDoTest>>tearDown
Task tasklist: savedTasks.
ToDoProject projectlist: savedProjects.
Person peoplelist: savedPeople
Il problema si presenta quando i miei test falliscono, il che ovviamente succede, questo fa apparire il debugger e posso ripararlo, ma il tearDown non viene sempre chiamato e quindi posso perdere i miei dati reali.
Salvare i dati nei file, quindi non è un problema enorme, ma non è così semplice e automatizzato come mi piacerebbe che fosse.
In ogni caso posso migliorare questo?
Interessante. Penso che l'idea di partizionare i dati in qualche modo possa aiutare qui. Ad esempio, la mia semplice app da fare non ha alcun concetto di utenti, potrei aggiungerli e quindi creare un utente di test per i test di unità. –
Ci sono molti modi per farlo. Se vuoi localizzare i tuoi dati, un modo semplice è spostare le cose dal lato della classe al lato dell'istanza. Se ToDoProject è la tua mossa principale, sposta i metodi di classe sul lato dell'istanza. Avresti ToDoProject >> # taskList, ToDoProject >> # projectList, ... In un primo passaggio potresti rendere ToDoProject un singleton in modo che la classe ToDoProject >> # default restituisca l'istanza ToDoProject con i tuoi dati reali.Il tuo componente balneare avrà un "progetto" instVar. Quindi si configura il componente con "ToDoProPro predefinito" per l'uso reale e per il test si imposta "ToDoProject nuovo" –