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并不总是被调用,所以我可能会丢失我的真实数据.
我确实将数据保存到文件中,所以这不是一个大问题,但它并不像我希望的那样顺畅和自动化.
无论如何我可以改善这个吗?
我不确定是否存在可以完全解决问题的方案.真正的问题是该模型是全球性的.这很方便,但在这种情况下很容易失败.因此,我会考虑将模型从全局变更为更本地化的变体,这样您就可以创建模型仅用于测试目的而不会干扰生产数据.
要在当前设置中修复它,您需要在某处添加ensure:block.无论一切正常还是发生错误,确保块都会"确保"执行某些操作.问题是你需要在测试前后进行.
在这种情况下,我会在你自己的测试类中用类似的东西覆盖TestCase >>#runCase
runCase
[ self saveRealModel.
super runCase ]
ensure: [ self restoreRealModel ]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |