2015-01-17 2 views
0

Так я переформатирования текстовый файл с именем pipe.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 

my 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 и пропустит его. Метод, который я написал, мне нужен тест, который показывает, что он работает

+0

Не получил .. Что вы пытаетесь сделать? –

+0

Я обновил его, я пытаюсь написать тест, который передает мой метод pipe, который переформатирует текстовый файл. – Andre

+1

Я бы переписал функцию 'pipe', чтобы не прочитать файл. Таким образом, вы можете протестировать его на одной строке, но при этом будете иметь функциональность, которую вы ожидаете. –

ответ

0

На ваш вопрос не отвечает. Подумайте об этом как о расширенном комментарии.

Если применить метод с г-ном Бонк будучи Монк и Стив Смит будучи Билли-Боб Торнтон, вы увидите, есть проблемы:

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" до | s удалены, так что вы можете определить, какой "M" должен быть заменен в каждой строке.
  • Вы забыли изменить "F" к "Female" :-)
  • gsub «s регулярное выражение, /(?<=\d)\-(?=\d)/ заменяет дефисы предшествуют и следуют цифры с /. (?<=\d) - «положительный взгляд»; (?=\d) - это «позитивный взгляд». Это гарантирует, что мы не будем связываться с именем мистера Торнтона.
Смежные вопросы