在Ruby Test::Unit中存根CSV文件

在Ruby Test::Unit中存根CSV文件,ruby,unit-testing,csv,testunit,Ruby,Unit Testing,Csv,Testunit,所以我有一个Ruby脚本,它将CSV文件解析为一个规则列表,并进行一些处理,然后返回一个哈希数组作为处理后的数据 CSV如下所示: id_number,rule,notes 1,"dummy_rule","necessary" 2,"sample_rule","optional" def parse_csv(file_name) filtered_data = [] CSV.foreach(file_name, headers: true) do |row| filtered_

所以我有一个Ruby脚本,它将CSV文件解析为一个规则列表,并进行一些处理,然后返回一个哈希数组作为处理后的数据

CSV如下所示:

id_number,rule,notes
1,"dummy_rule","necessary"
2,"sample_rule","optional"
def parse_csv(file_name)
  filtered_data = []
  CSV.foreach(file_name, headers: true) do |row|
    filtered_data << row # some processing
  end
  filtered_data
end
CSV的解析如下所示:

id_number,rule,notes
1,"dummy_rule","necessary"
2,"sample_rule","optional"
def parse_csv(file_name)
  filtered_data = []
  CSV.foreach(file_name, headers: true) do |row|
    filtered_data << row # some processing
  end
  filtered_data
end
我使用Test::Ruby

我还发现了一个名为mocha的ruby gem库,但我不知道它如何适用于CSV


欢迎有任何想法

我会在您的测试目录中创建一个支持目录,然后创建一个文件

# test/support/rules.csv
id_number,rule,notes
1,"dummy_rule","necessary"
2,"sample_rule","optional"
您的测试应该是这样的,还添加了一个开放的卷曲括号,看起来您错过了第2行

编辑:对不起,我应该注意到这不是Ruby on Rails。。。这里有一个ruby解决方案:

def test_parse_csv
   expected_result = [{"id_number"=>1, "rule"=>"dummy_rule", "notes"=>"optional"}]
   assert.equal(expected_result, parse_csv(csv_file).first)
end

def csv_file
  File.read('test/support/rules.csv') 
end

我在测试中这样做了
let(:raw_csv){“row_number\n 1\n 2”}
,告诉自己csv文件肯定是作为一个带换行符和逗号的简单字符串读取的。。。而且效果很好。小心使用额外的空格和逗号,很容易出错。

我想避免将物理csv文件作为测试数据。我不使用Rails,只使用Ruby。这是我的错,我应该知道。添加了一个ruby解决方案。我认为您没有太多选择,但要创建一个csv文件,恐怕您可以将
#parse_csv
的结果存根,但您将跳过测试此特定功能。另外值得添加的是,将物理csv文件添加为测试套件的一部分没有任何问题。这是一种完全可以接受的测试核心功能的彻底方法。是的。我知道这种方法,它没有错。我只是想知道我所问的是否可能。当然,一个有效的问题:)我会回答这是不可能的,而且(OOP)最佳实践也会建议不要太多,这个答案在解释原因方面很好,如果你愿意遵循,它可以适用于你