首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用StringIO伪装文件

用StringIO伪装文件
EN

Stack Overflow用户
提问于 2013-10-01 07:08:20
回答 1查看 5.6K关注 0票数 5

我试图在Ruby中的帮助下模拟文件读取StringIO。下面是我的测试,接下来是我在主类中的方法。

代码语言:javascript
复制
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

我想知道这是否是我们模拟文件读取的方式,我还想知道是否有其他方法来模拟类中的方法,而不是与内容相同的断言。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-01 08:01:55

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

代码语言:javascript
复制
StringIO.new("YHOO,141414").readlines == ["YHOO,141414"] #=> true

如果要将StringIO实例用作文件的占位符,则必须更改方法以获取File实例,而不是文件名:

代码语言:javascript
复制
def get_symbols_from_file(file)
  file.readlines(',')
end

FileStringIO实例都响应于readlines,因此上面的实现可以同时处理这两种情况:

代码语言:javascript
复制
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"的数组。

也许你在找这样的东西:

代码语言:javascript
复制
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

代码语言:javascript
复制
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
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19110063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档