Ruby - 如何使用minitest测试方法

时间:2016-11-14 14:27:10

标签: ruby minitest

我有这堂课:

require 'yaml'

class Configuration
  class ParseError < StandardError; end

  attr_reader :config

  def initialize(path)
    @config = YAML.load_file(path)
  rescue => e
    raise ParseError, "Cannot open config file because of #{e.message}"
  end

  def method_missing(key, *args, &block)
    config_defines_method?(key) ? @config[key.to_s] : super
  end

  def respond_to_missing?(method_name, include_private = false)
    config_defines_method?(method_name) || super
  end

  private

  def config_defines_method?(key)
    @config.has_key?(key.to_s)
  end
end

如何编写方法测试:method_missing,respond_to_missing?,config_defines_method? 我对单元测试有一些了解,但是当涉及到Ruby时我很新。

到目前为止,我已经尝试过这个:

def setup
  @t_configuration = Configuration.new('./config.yaml')
end

def test_config_defines_method
  @t_configuration.config[:test_item] = "test"
  assert @t_configuration.respond_to_missing?(:test_item)
end

我不确定我是否正确测试,因为当我进行rake测试时,它给了我这个:

  

NoMethodError:私有方法`respond_to_missing?&#39;呼吁#

如果没有明确的方法如何解决这个问题,是否有人可以将我带到一个类似测试的地方?到目前为止,我只发现了hello world类型的测试示例,在这种情况下没有多大帮助。

1 个答案:

答案 0 :(得分:2)

documentation for #respond_to_missing?中所述,您不希望直接调用该方法。相反,您要检查对象是否响应您的方法。这是使用#respond_to?方法完成的:

assert @t_configuration.respond_to?(:test_item)
相关问题