您的测试中从未调用
get_symbols_from_file
方法。您只是测试了
StringIO#readlines
方法是否有效,即:
StringIO.new("YHOO,141414").readlines == ["YHOO,141414"]
如果您想使用 StringIO
实例作为文件的占位符,您需要更改方法以接受 File
实例而不是文件名:
def get_symbols_from_file(file)
file.readlines(',')
end
File
和 StringIO
实例都响应 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
get_symbols_from_file
在测试中实际上从未被调用。 - Stefan