在Ruby Test::Unit中存根CSV文件
所以我有一个Ruby脚本,它将CSV文件解析为一个规则列表,并进行一些处理,然后返回一个哈希数组作为处理后的数据 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_
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)最佳实践也会建议不要太多,这个答案在解释原因方面很好,如果你愿意遵循,它可以适用于你