使用Smalltalk Seaside测试数据或等效测试数据?

Eri*_*ack 5 smalltalk seaside pharo

我一直在使用我正在玩的Seaside应用程序中的测试驱动开发,并且我的所有数据都作为对象存储在图像中(而不是数据库).

因此,当我运行测试时,我必须小心存储真实数据,然后才能使用测试数据进行删除,如下所示:

ToDoTest>>setUp 
    savedTasks := Task tasklist.
    Task deleteAllTasks.

    savedProjects := ToDoProject projectlist.
    ToDoProject deleteAllProjects.

    savedPeople := Person peoplelist.
    Person deleteAllPeople.
Run Code Online (Sandbox Code Playgroud)

和:

ToDoTest>>tearDown
    Task tasklist: savedTasks.
    ToDoProject projectlist: savedProjects.
    Person peoplelist: savedPeople
Run Code Online (Sandbox Code Playgroud)

问题来自我的测试失败,当然他们这样做,这会弹出调试器,然后我可以解决,但是tearDown并不总是被调用,所以我可能会丢失我的真实数据.

我确实将数据保存到文件中,所以这不是一个大问题,但它并不像我希望的那样顺畅和自动化.

无论如何我可以改善这个吗?

Nor*_*rtl 6

我不确定是否存在可以完全解决问题的方案.真正的问题是该模型是全球性的.这很方便,但在这种情况下很容易失败.因此,我会考虑将模型从全局变更为更本地化的变体,这样您就可以创建模型仅用于测试目的而不会干扰生产数据.

要在当前设置中修复它,您需要在某处添加ensure:block.无论一切正常还是发生错误,确保块都会"确保"执行某些操作.问题是你需要在测试前后进行.

在这种情况下,我会在你自己的测试类中用类似的东西覆盖TestCase >>#runCase

runCase
   [ self saveRealModel.
      super runCase ]
      ensure: [ self restoreRealModel ]
Run Code Online (Sandbox Code Playgroud)