如何测试Ruby中的目录读取和寻址方法?

时间:2019-05-26 09:09:29

标签: ruby rspec

我有一个ruby类来读取目录并为每个文件做一些事情。但是我不确定如何测试。

class Scanner
  def scan(dir)
    Dir.glob(File.join(dir, '**', '*')).each do |path|
       verify(path)
    end
  end

  private 

  def verify(path)
    do something for the file...
  end
end

我想对scan方法进行单元测试。

  • 我应该嘲笑什么吗?
  • 我应该在spec/fixtures中提供一个测试目录吗?
  • 期望是什么?

欢呼

1 个答案:

答案 0 :(得分:0)

几乎没有办法解决这个问题。一种(在评论中建议)是将关注点分开,例如

class Scanner
  def scan(dir)
    Dir.glob(File.join(dir, '**', '*')).each do |path|
       verify(path)
    end
  end

  private 

  def verify(path)
    Veryfier.new.verify(File.read(path))
    # you can test veryfier easily by passing different strings into `verify` method
  end
end

继续您的生活,因为Scanner#scan不再那么复杂,并且您不会期望其中有很多错误。

但是,如果出于某种原因也希望对其进行测试,则可以执行以下操作之一:

  • test/features下建立目录结构,并像不同情况一样使用不同的目录。这有一个缺点:您必须检查目录并阅读测试以了解测试。但这很简单。

  • 使用Dir.tmpdir和File.tmpfile在测试中设置dir结构。这涉及更多,但是从好的方面来说,您在单个测试文件中拥有Scanner的结构和行为测试。