我有一个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
中提供一个测试目录吗?欢呼
答案 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
的结构和行为测试。