有时,当我编写单元测试时,我需要在不调用 initialize
方法的情况下实例化一个类。例如,当构造函数实例化其他类时,无论如何我都会用 stub 替换它们。例如:
class SomeClassThatIWillTest
def initialize
@client = GoogleAnalyticsClient.new
@cache = SuperAdvancedCacheSystem.new
end
# ...
end
在测试中,我可能会将 @client
和 @cache
替换为 stub ,因此我宁愿从未调用构造函数。有什么黑魔法可以帮助我解决这个问题吗?
最佳答案
当然可以。 Class#new
只不过是一种方便的方法,它使您不必手动分配和初始化对象。它的实现大致如下所示:
class Class
def new(*args, **kwargs, &blk)
obj = allocate
obj.send(:initialize, *args, **kwargs, &blk)
obj
end
end
您可以只手动调用 Class#allocate
,而不调用 initialize
。
关于ruby - 是否可以在不调用初始化的情况下实例化 Ruby 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16982538/