Форум программистов, компьютерный форум, киберфорум
Наши страницы
Ruby
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
vergto
0 / 0 / 0
Регистрация: 13.09.2018
Сообщений: 6
1

Как написать тест для программы?

14.10.2018, 20:15. Просмотров 580. Ответов 3
Метки нет (Все метки)

Суть программы заключается в создании последовательности строк.Каждая строка состоит из слов разделенных пробелами.
Нужно написать программу обеспечивающую ввод строк и их корректировку. Корректировка заключается в :
1) если слово стоит на нечетном месте и начинается на букву 'л' то слово удалить
2) если слово стоит на четном месте и начинается на букву 'н' то слово заменить на то что пользователь введет с клавиатуры
на печать вывести исходную и скорректированную последовательности строк.

А так же написать тест что генерирует случайные строки в соответствии с правилами.

не могу сделать генерацию чисел
а так же не представляю связь между тестом и вводом слова в тесте
поэтому и вбиваю 123
но ничего не работает(
интернет пишет что все правильно

Как написать тест для программы?

Как написать тест для программы?

Как написать тест для программы?

Как написать тест для программы?


Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
require './31.rb'
arr_str = []
puts 'Введите колличество строк'
x = gets.to_i
x.times do |i|
puts 'введите строку'
arr_str[i] = gets.chomp
arr_str[i] = arr_str[i].split
end
 
print 'исходная строка: '
y = arr_str
print "#{y} \n"
 
arr_str.length.times do |i|
arr_str = b(arr_str, i)
end
 
print "#{arr_str} \n"
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def b(str, iii)
x = str
y = x[iii].length
y = 0...y
x = c(x, iii, y)
print "#{x} \n"
x = d(x, iii, y)
print "#{x} \n"
a(x, iii)
end
 
def a(xxx, iii)
if xxx.length - 1 == iii
iii += 1
iii.times do |i|
xxx[i].delete(nil)
end
end
xxx
end
 
def c(xxx, iii, yyy)
yyy.each do |i|
xxx[iii][i] = nil if i.odd? && xxx[iii][i].chars.first == 'л'
end
xxx
end
 
def d(xxx, iii, yyy)
yyy.each do |i|
xxx[iii][i] = gets.chomp if i.even? && xxx[iii][i].chars.first == 'н'
end
xxx
end
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
require 'minitest/autorun'
require 'minitest/unit.rb'
require_relative '31.rb'
 
# Тест функции строк
class StrTest < MiniTest::Unit::TestCase
def test
output = gen_wordf(rand(3..5))
input = '123'
add_words(output, input)
assert_equal input, b(output, 0)
end
end
 
def gen_wordf(size)
x = 'н' + (0...size).map {'' ('а'..'я').to_a[rand(26)] }.join
x += 'л' + (0...size).map {'' ('а'..'я').to_a[rand(26)] }.join
end
 
def gen_word(size)
x = (0...size).map {'' ('а'..'я').to_a[rand(26)] }.join
end
 
def add_words(output, input)
rand(2..10).times do
word = gen_word(rand(3..5))
if word.chars.first == 'л' && output.length.even?
output « ' '
output « word
elsif word.chars.first == 'н' && output.length.odd?
output « ' '
input « ' '
output « word
input « '123'
elsif word.chars.first == 'н' && word.chars.first == 'л'
output « ' '
input « ' '
output « word
input « word
end
end
end
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2018, 20:15
Ответы с готовыми решениями:

Как написать тест для авторизованного пользователя?
помогите пожалуйста советом. я написал тест для экшена edit: test &quot;should get edit&quot; do ...

Не получается написать тест для проверки программы
Доброго времени суток! Perl мой первый язык программирования и я совсем недавно начал его изучать,...

Как написать модульный тест для функции main
имеется функция нахождения максимального из трех целых чисел int main() { int a, b, c, mx; ...

Меню для программы-тест
Народ, помогите пожалуйста!!!!!!!!!!!! У меня есть код проги-теста, нужно сделать для неё меню!!!...

Как написать скины для программы?
Здравствуйте. Надо сделать программу(Сам буду писать). НО надо что бы можно было переключать...

3
j2FunOnly
Модератор
Эксперт JS
1127 / 1002 / 556
Регистрация: 05.06.2015
Сообщений: 2,257
15.10.2018, 10:05 2
Цитата Сообщение от vergto Посмотреть сообщение
Ruby
1
2
3
4
5
6
7
8
9
def a(xxx, iii)
if xxx.length - 1 == iii
iii += 1
iii.times do |i|
xxx[i].delete(nil)
end
end
xxx
end
Голова потом не кружится от всех этих xxx и iii?

Во-первых: Правила форума
5.18 Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.
Ну да ладно, код есть... Итак.

Создаёте папку projects в домашнем каталоге.
Дальше в командной строке
Bash
1
2
3
4
5
6
7
bundle gem string_corrector --mit --test=minitest
cd string_corrector
bundle install
git add .
git commit -m 'Init repo'
# run your favorite editor
atom . | sublime . | vim | etc...
Правите string_corrector.gemspec. Что править вам подскажет rake, просто запросите список доступных команд rake --tasks

И пишите первый тест ./test/string_corrector_test.rb
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
require "test_helper"
 
class StringCorrectorTest < Minitest::Test
  def test_that_it_has_a_version_number
    refute_nil ::StringCorrector::VERSION
  end
 
  def test_delete_odd_words
    str = 'люблю я макароны'
    result = 'я макароны'
    assert_equal StringCorrector.call(str), result
  end
end
Запускаете
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ rake test
Run options: --seed 22810
 
# Running:
 
E.
 
Finished in 0.001701s, 1175.6836 runs/s, 587.8418 assertions/s.
 
  1) Error:
StringCorrectorTest#test_delete_odd_words:
NoMethodError: undefined method `call' for StringCorrector:Module
    /home/j2funonly/projects/cyber/ruby/string_corrector/test/string_corrector_test.rb:12:in `test_delete_odd_words'
 
2 runs, 1 assertions, 0 failures, 1 errors, 0 skips
rake aborted!
Command failed with status (1)
/home/j2funonly/.rvm/gems/ruby-2.5.1@global/gems/rake-12.3.1/exe/rake:27:in `<top (required)>'
/home/j2funonly/.rvm/gems/ruby-2.5.1/bin/ruby_executable_hooks:24:in `eval'
/home/j2funonly/.rvm/gems/ruby-2.5.1/bin/ruby_executable_hooks:24:in `<main>'
Tasks: TOP => test
(See full trace by running task with --trace)
Правильно, нет такого метода - добавим ./lib/string_corrector.rb
Ruby
1
2
3
4
5
6
7
require "string_corrector/version"
 
module StringCorrector
  def self.call(str)
 
  end
end
Запускаете опять:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ rake test
Run options: --seed 44068
 
# Running:
 
.F
 
Finished in 0.001384s, 1444.7401 runs/s, 1444.7401 assertions/s.
 
  1) Failure:
StringCorrectorTest#test_delete_odd_words [/home/j2funonly/projects/cyber/ruby/string_corrector/test/string_corrector_test.rb:12]:
Expected: "я макароны"
  Actual: nil
 
2 runs, 2 assertions, 1 failures, 0 errors, 0 skips
rake aborted!
Command failed with status (1)
/home/j2funonly/.rvm/gems/ruby-2.5.1@global/gems/rake-12.3.1/exe/rake:27:in `<top (required)>'
/home/j2funonly/.rvm/gems/ruby-2.5.1/bin/ruby_executable_hooks:24:in `eval'
/home/j2funonly/.rvm/gems/ruby-2.5.1/bin/ruby_executable_hooks:24:in `<main>'
Tasks: TOP => test
(See full trace by running task with --trace)
Отлично, рантайм ошибок нет, тест фейлится. Впрочем, как и должен (наш метод ничего не возвращает).

Пишем реализацию ./lib/string_corrector.rb
Ruby
1
2
3
4
5
6
7
8
9
10
require "string_corrector/version"
 
module StringCorrector
  def self.call(str)
    str.split(' ').each_with_object([]).with_index do |(w, acc), i|
      next if (i + 1).odd? && w.start_with?('л')
      acc << w
    end.join(' ')
  end
end
Запускаем опять:
Bash
1
2
3
4
5
6
7
8
9
10
$ rake test
Run options: --seed 9247
 
# Running:
 
..
 
Finished in 0.001538s, 1300.4163 runs/s, 1300.4163 assertions/s.
 
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips
Класс
Bash
1
2
git add .
git commit -m 'Implemented odd words deletion'
Дальше пишем тест, на четные и буквы "н" ./test/string_corrector_test.rb
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
require "test_helper"
 
class StringCorrectorTest < Minitest::Test
  # code omit for bravity
 
  def test_change_even_words
    str = 'я никогда не сплю'
    result = 'я всегда не сплю'
 
    assert_equal result, StringCorrector.call(str) { 'всегда' }
  end
end
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ rake test
Run options: --seed 61342
 
# Running:
 
F..
 
Finished in 0.002274s, 1319.4573 runs/s, 1319.4573 assertions/s.
 
  1) Failure:
StringCorrectorTest#test_change_even_words [/home/j2funonly/projects/cyber/ruby/string_corrector/test/string_corrector_test.rb:19]:
Expected: "я всегда не сплю"
  Actual: "я никогда не сплю"
 
3 runs, 3 assertions, 1 failures, 0 errors, 0 skips
rake aborted!
Command failed with status (1)
/home/j2funonly/.rvm/gems/ruby-2.5.1@global/gems/rake-12.3.1/exe/rake:27:in `<top (required)>'
/home/j2funonly/.rvm/gems/ruby-2.5.1/bin/ruby_executable_hooks:24:in `eval'
/home/j2funonly/.rvm/gems/ruby-2.5.1/bin/ruby_executable_hooks:24:in `<main>'
Tasks: TOP => test
(See full trace by running task with --trace)
Всё норм, тест, как и ожидалось, красный. Реализуем
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
require "string_corrector/version"
 
module StringCorrector
  def self.call(str)
    str.split(' ').each_with_object([]).with_index do |(w, acc), i|
      next if (i + 1).odd? && w.start_with?('л')
 
      word = if (i + 1).even? && w.start_with?('н')
        block_given? ? yield : ''
      else
        w
      end
 
      acc << word
    end.join(' ')
  end
end
Bash
1
2
3
4
5
6
7
8
9
10
$ rake test
Run options: --seed 44458
 
# Running:
 
...
 
Finished in 0.001703s, 1761.8020 runs/s, 1761.8020 assertions/s.
 
3 runs, 3 assertions, 0 failures, 0 errors, 0 skips
Ну и вот: red, green и мы молодцы
Bash
1
2
git add .
git commit -m 'Implemented even words replace'
дальше рефактор и т. д. и т. п.
0
vergto
0 / 0 / 0
Регистрация: 13.09.2018
Сообщений: 6
15.10.2018, 21:30  [ТС] 3
Цитата Сообщение от j2FunOnly Посмотреть сообщение
rake --tasks
уже на этом этапе перестает работать выдавая куча ошибок
Цитата Сообщение от j2FunOnly Посмотреть сообщение
rake test
здесь аналогичная ситуация

и зачем мы создали проект новый, в него кинуть файл , или нужно подключить как то программу ?

Как написать тест для программы?
0
vergto
0 / 0 / 0
Регистрация: 13.09.2018
Сообщений: 6
15.10.2018, 21:55  [ТС] 4
Цитата Сообщение от j2FunOnly Посмотреть сообщение
git add .
мне по заданию нужно 1 файлик с тестом
то есть как я и пытался сделать изначально
вроде бы у меня не так уж и плохо получилось
только не работает
не могу сделать саму генерацию русского слова и занесения его в список
0
15.10.2018, 21:55
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2018, 21:55

Как написать скины для программы?
Здравствуйте. Надо сделать программу(Сам буду писать). НО надо что бы можно было переключать...

Как написать скины для программы?
Здравствуйте. Надо сделать программу(Сам буду писать). НО надо что бы можно было переключать...

Как написать код для этой программы
Даны действительные числа a, h, натуральное число n. Вычислить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru