我有一个文本文件,我打算将其转换为CSV(在本例中)格式。如何创建正确的RSpec测试以查看输出是否采用适合以下方案的格式?
这是我的代码:
class ProcessLog
@@log = Array.new
def read_log(log)
if File.exists?(log)
f = File.open(log, "r")
f.each_line { |line| @@log << line.strip }
end
end
def process_log
result = Array.new
@@log.each do |line|
<convert to csv>
result << <converted to csv>
end
result
end
end
describe ProcessLog do
before do
@pl = ProcessLog.new
<help>
end
it 'should pass first format' do
text = "Item X has a price of $ per gram" # just as an example
<help>
@pl.read_log("file.log")
@pl.should == 'X,$,gram'
end
end
答案 0 :(得分:1)
首先,当您需要实例变量(@@log
)时,您正在使用类变量(@log
)。但实际上没有理由使用它们。
我会像这样拆分这些方法,所以你可以单独测试它们:
现在你的方法是紧密耦合的,因为它们都使用了实例变量,并且它使得测试比它需要的更难(你必须设置或伪造第一种方法的调用以开始测试第二种方法)
您可以使用类似FakeFS的内容测试第一个方法来读取(假)文件的内容。实际上,这种方法应该是相当简单的,你可能根本不需要测试它。
第二种方法在将耦合移到第一种方法时更容易测试。从您希望解析的文件中创建一个行数组,并将其传递给该方法,然后检查结果。