Ich habe Test Driven Development in einer Seaside-App verwendet, mit der ich gespielt habe, und alle meine Daten werden als Objekte im Bild gespeichert (im Gegensatz zu einer Datenbank).Prüfadapter oder ähnliches für Testdaten mit Smalltalk Seaside?
Also, wenn ich meine Tests ausführen Ich habe die realen Daten vorsichtig sein, weg zu speichern, bevor sie mit Testdaten, wie diese im Papierkorb wird:
ToDoTest>>setUp
savedTasks := Task tasklist.
Task deleteAllTasks.
savedProjects := ToDoProject projectlist.
ToDoProject deleteAllProjects.
savedPeople := Person peoplelist.
Person deleteAllPeople.
Und:
ToDoTest>>tearDown
Task tasklist: savedTasks.
ToDoProject projectlist: savedProjects.
Person peoplelist: savedPeople
Das Problem kommt, wenn meine Tests fehlschlagen, was sie natürlich tun, das öffnet den Debugger, und ich kann dann wegräumen, aber das TearDown wird nicht immer aufgerufen und so kann ich meine echten Daten verlieren.
Ich speichere die Daten in Dateien, also ist es kein großes Problem, aber es ist nicht so glatt und automatisiert, wie ich es gerne hätte.
Wie auch immer ich kann das verbessern?
Interessant. Ich denke, dass die Idee der Partitionierung der Daten in irgendeiner Weise hier helfen kann. Zum Beispiel hat meine einfache to-do-App derzeit kein Konzept von Benutzern, ich könnte diese hinzufügen und dann einen Testbenutzer für die Komponententests erstellen. –
Es gibt viele Möglichkeiten, dies zu tun. Wenn Sie Ihre Daten lokalisieren möchten, können Sie Dinge einfach von der Klassenseite zur Instanzseite verschieben. Wenn ToDoProject Ihre Hauptklasse ist, verschieben Sie die Klassenmethoden auf die Instanzseite. Sie hätten ToDoProject >> # taskList, ToDoProject >> # projectList, ... In einem ersten Schritt könnten Sie ToDoProject zu einem Singleton machen, so dass ToDoProject class >> # default die ToDoProject-Instanz mit Ihren echten Daten zurückgibt.Ihre Küstenkomponente wird ein instVar "Projekt" haben. Dann konfigurieren Sie Ihre Komponente mit "ToDoProject default" für den echten Gebrauch und zum Testen setzen Sie "ToDoProject new" –