-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Реализовать MergeBU #46
Comments
@be9 Здесь не совсем понял как реализовать. В одном файле merge_sort.rb будет и обычный merge_sort и BU, и два тестовых файла (один от другого наследуется, напр.). Тогда надо тестируемый метод как аргумент передавать в тест? (соответственно, тест под это дело подогнать) |
В тест можно передавать блок, который будет вызывать нужную функцию (просто функцию в Ruby передать нельзя, т.е. можно, но так не делают) Другой вариант: делается два TestCase, наследующиеся от одного класса, и у каждого создается метод sort, который в одном случае будет вызывать одну функцию, а в другом — другую. Второй вариант даже проще. |
@be9 Возникла проблема. Хочу реализовать второй вариант (просто чтобы знать хотя бы, как делается, для себя; первый тоже потом реализую). merge_sort_test.rb
sort_test.rb
При запуске файла merge_sort_test.rb выдает ошибку ArgumentError в sort!, given 1, expected 0. Что я делаю не так? П.С. знаю, что определять sort! в классе родителе необязательно - он выдаст просто NoMethodError, но сути дела это не меняет, как я понял. П.П.С. Копировать с мобильного ssh клиента трудно. Возможны мелкие синтаксические ошибки. |
@be9 Update: с отсутствием абстракных классов погорячился...
|
Проблема тут в том, что в базовом классе ты объявил метод без аргументов, а в классе-наследнике аргументы добавил. В базовом классе стоило бы написать так: def sort!(ary)
raise NotImplementedError, "To be implemented in child class"
end или даже def sort!(*)
raise NotImplementedError, "To be implemented in child class"
end Последняя версия позволяет принимать любое количество аргументов. |
@be9 Так тоже не работает. Вы уверены, что так можно сделать? (Где-то прочел, что minitest запускает файлы только унаследованные непосредственно от Minitest::Test). Может, в этом дело? |
Проблема в том, что твой SortTest тоже запускается на проверку, ибо содержит методы test_*. Т.е. идея с «абстрактным» базовым классом, увы, не прокатит. Это уже я погорячился со своим предложением. |
Cтр. 278.
Сделать одну версию с необязательным блоком (аналогично
shell_sort2!
). Можно реализовать их в одном модуле с #45 и использовать наследование или include для классов тестов, чтобы избежать дублирования.The text was updated successfully, but these errors were encountered: