ruby - 是否可以在不调用初始化的情况下实例化 Ruby 类?

标签 ruby unit-testing

有时,当我编写单元测试时,我需要在不调用 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/

相关文章:

java - 如何在 jOOQ 的 MockDataProvider 中使用示例数据创建自定义记录?

php - 使用 PHP 匿名类进行测试和模拟

javascript - 如何在 Rails 中制作动态下拉菜单?

ruby-on-rails - Begin 和 Rescue block 异常处理

ruby-on-rails - 通过 ROR 连接到 AppNexus API

C++:将对象的创建与使用分开(用于测试目的)

python - 使用模拟对象的困境

arrays - Ruby:操纵迭代器?

php - 在 ruby​​ on rails 或 php 中创建弯曲、拱形、楔入等文本效果

c# - 从同一解决方案中另一个项目的 View 调用类库中的函数