我是一名 Java 开发人员,正在玩弄 Ruby,并且喜欢它。我了解到,由于 Ruby 的元编程工具,我的单元测试变得更加清晰,并且我不需要讨厌的模拟框架。我有一个需要File
类服务的类,在我的测试中我不想接触我真正的文件系统。在 Java 中,我会使用一些虚拟文件系统来更轻松地“接缝”来传递假对象,但在 Ruby 中,这显然是矫枉过正。与 Java 世界相比,我想出的东西似乎已经很不错了。在我的测试类中,我有一个可选的构造函数参数:
def initialize(file_class=File)
当我需要在课堂上打开文件时,我可以这样做:
@file_class.open(filename)
并且调用转到真正的文件类,或者在我的单元测试的情况下,它转到不接触文件系统的假类。我知道必须有更好的方法来使用元编程来做到这一点?