Ruby Mock是一个使用StringIO的文件
发布时间:2020-12-17 03:55:30 所属栏目:百科 来源:网络整理
导读:我试图在 Ruby的StringIO的帮助下模拟文件读取. 以下是我的测试,接下来就是我在主类中的方法. def test_get_symbols_from_StringIO_file s = StringIO.new("YHOO,141414") assert_equal(["YHOO,141414"],s.readlines)enddef get_symbols_from_file (file_nam
我试图在
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与内容相等. 解决方法
您的方法get_symbols_from_file永远不会在测试中调用.您只是测试StringIO #readlines的工作原理,即:
StringIO.new("YHOO,141414").readlines == ["YHOO,141414"] #=> true 如果要将StringIO实例用作文件的占位符,则必须更改方法以获取 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,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,你可以创建一个 require 'tempfile' def test_get_symbols_from_file Tempfile.open("foo") { |f| f.write "YHOO,141414" f.close assert_equal(["YHOO",get_symbols_from_file(f.path)) } end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |