gpt4 book ai didi

Ruby 使用 StringIO 模拟一个文件

转载 作者:数据小太阳 更新时间:2023-10-29 07:23:50 25 4
gpt4 key购买 nike

我正在尝试借助 Ruby 中的 StringIO 模拟文件读取。以下是我的测试,旁边是我在主类中的方法。

def test_get_symbols_from_StringIO_file
s = StringIO.new("YHOO,141414")
assert_equal(["YHOO,141414"], s.readlines)
end

def get_symbols_from_file (file_name)
IO.readlines(file_name, ',')
end

我想知道这是否是我们模拟文件读取的方式,我还想知道是否有其他方法可以模拟类中的方法而不是使用 assert equal with contents。

最佳答案

您的方法 get_symbols_from_file 从未在测试中被调用。您只是在测试 StringIO#readlines 是否有效,即:

StringIO.new("YHOO,141414").readlines == ["YHOO,141414"] #=> true

如果您想使用StringIO 实例作为文件的占位符,您必须更改方法以获取File。实例而不是文件名:

def get_symbols_from_file(file)
file.readlines(',')
end

FileStringIO 实例都响应readlines,所以上面的实现可以同时处理:

def test_get_symbols_from_file
s = StringIO.new("YHOO,141414")
assert_equal(["YHOO,141414"], get_symbols_from_file(s))
end

但是这个测试失败了:readlines 包含行分隔符,所以它返回一个包含两个元素的数组 "YHOO,"(注意逗号)和 "141414"。您需要一个包含一个元素 "YHOO,141414" 的数组。

也许您正在寻找这样的东西:

def test_get_symbols_from_file
s = StringIO.new("YHOO,141414")
assert_equal(["YHOO", "141414"], get_symbols_from_file(s))
end

def get_symbols_from_file(file)
file.read.split(',')
end

如果你真的想使用IO::readlines,你可以创建一个Tempfile :

require 'tempfile'

def test_get_symbols_from_file
Tempfile.open("foo") { |f|
f.write "YHOO,141414"
f.close
assert_equal(["YHOO", "141414"], get_symbols_from_file(f.path))
}
end

关于Ruby 使用 StringIO 模拟一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19110063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com