smalltalk - 使用 Smalltalk Seaside 测试数据的测试装置或等效物?

标签 smalltalk pharo seaside

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

因此,当我运行我的测试时,我必须小心地在真实数据被测试数据破坏之前将其存储起来,如下所示:

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

    savedProjects := ToDoProject projectlist.
    ToDoProject deleteAllProjects.

    savedPeople := Person peoplelist.
    Person deleteAllPeople.

和:
ToDoTest>>tearDown
    Task tasklist: savedTasks.
    ToDoProject projectlist: savedProjects.
    Person peoplelist: savedPeople

当我的测试失败时,问题就出现了,他们当然会失败,这会弹出调试器,然后我可以修复,但是tearDown 并不总是被调用,所以我可能会丢失我的真实数据。

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

无论如何,我可以改进吗?

最佳答案

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

要在您当前的设置中修复它,您需要在某处添加一个 ensure: 块。确保块“确保”您执行某些操作,无论一切是否正常或发生错误。问题是你需要在测试之前和之后进行。

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

runCase
   [ self saveRealModel.
      super runCase ]
      ensure: [ self restoreRealModel ]

关于smalltalk - 使用 Smalltalk Seaside 测试数据的测试装置或等效物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16256680/

相关文章:

Smalltalk - 海边报道

jquery - 如何实时获取元素的位置

smalltalk - smalltalk 中的 if 可以省略 ifTrue 吗?

smalltalk - 是否可以将消息分配给变量?

smalltalk - 在 Pharo Smalltalk 中发送 Zodiac 邮件

smalltalk - Seaside:CannotDeleteFileException:无法删除旧版本的燃油文件

smalltalk - Pharo 的 Pen 类在哪里?

debugging - Pharo:如何在调试器中查看 newProcess 的发送者?

smalltalk - 在 pharo seaside 3.2 中捕获 session 过期