测试重新格式化的文本文件方法

时间:2015-01-17 19:39:08

标签: ruby minitest

所以我正在重新格式化来自

的名为pipe.txt的txt文件
Smith | Steve | D | M | Red | 3-3-1985
Bonk | Radek | S | M | Green | 6-3-1978
Bouillon | Francis | G | M | Blue | 6-3-1975  

Bonk  Radek  S  Male  Green  6/3/1978
Bouillon  Francis  G  Male  Blue  6/3/1975
Smith  Steve  D  Male  Red  3/3/1985

这是我的代码是输出的app.rb

def pipe
  alpha = File.readlines('pipe.txt').sort 
  alpha.each {|line| line.gsub! '-', '/'}
  alpha.each {|line| line.gsub! '|', ''}
  alpha.each {|line| line.gsub! 'M', 'Male'}
end

我的test.rb目前看来是这样的

require_relative "app"
require 'minitest'
require 'minitest/autorun'
require 'minitest/rg'


class AppTest < Minitest::Test

 def test_pipe_file
   pipe = File.open 'pipe.txt'
   assert_equal pipe, pipe
 end

 def test_space_file
   space = File.open 'space.txt'
   assert_equal space, space
 end

 def test_comma_file
   comma = File.open 'comma.txt'
   assert_equal comma, comma
 end

 def test_pipe_output1

 end


end

我想为我的管道方法编写一个测试,重新格式化txt文件并使其通过。我写的方法工作,我只需要一个测试,表明它的工作原理

1 个答案:

答案 0 :(得分:0)

以下内容未回答您的问题。把它想象成一个扩展的评论。

如果你的方法是Bonk先生是Monk先生而史蒂夫史密斯是Billy-Bob Thornton,你会看到有问题:

text =<<THE_END
Thornton | Billy-Bob | D | M | Red | 3-3-1985
Monk | Radek | S | M | Green | 6-3-1978
Bouillon | Francis | G | M | Blue | 6-3-1975  
THE_END

def pipe(lines)
  alpha = lines.sort
  alpha.each {|line| line.gsub! '-', '/'}
  alpha.each {|line| line.gsub! '|', ''}
  alpha.each {|line| line.gsub! 'M', 'Male'}
end

pipe(text.lines)
  #=> ["Bouillon  Francis  G  Male  Blue  6/3/1975  \n",
  #    "Maleonk  Radek  S  Male  Green  6/3/1978\n",
  #    "Thornton  Billy/Bob  D  Male  Red  3/3/1985\n"]

考虑这样做:

def pipe(lines)
  lines.sort.map { |line| line.sub(/\|\s+M\s+\|/,'Male')
                              .gsub(/(?<=\d)\-(?=\d)/,?/)
                              .delete(?|) }
end

pipe(text.lines)
  #=> ["Bouillon  Francis  G Male Blue  6/3/1975  \n",
  #    "Monk  Radek  S Male Green  6/3/1978\n",
  #    "Thornton  Billy-Bob  D Male Red  3/3/1985\n"] 

注意:

    在删除"M"之前,必须将
  • "Male"更改为|,以便您可以确定每行中要替换的"M"
  • 您忘了将"F"更改为"Female": - )
  • gsub的正则表达式,/(?<=\d)\-(?=\d)/替换前面带有/的数字的连字符。 (?<=\d)是一个“积极的看法”; (?=\d)是一个“积极的向前看”。这将确保我们不会弄乱桑顿先生的名字。