From a7c65a9f6fffba991cd8a11b3ab8abfc9be7a81b Mon Sep 17 00:00:00 2001 From: SevenLightnapper Date: Sun, 13 Oct 2024 03:49:42 +0300 Subject: [PATCH 1/2] module12 hw3 completed --- module12/hw3/img.png | Bin 0 -> 63118 bytes module12/hw3/runner_and_tournament.py | 39 +++++++ module12/hw3/runner_test.py | 49 +++++++++ module12/hw3/suit_12_3.py | 23 +++++ module12/hw3/tests_12_3.py | 140 ++++++++++++++++++++++++++ module12/hw3/tournament_test.py | 69 +++++++++++++ 6 files changed, 320 insertions(+) create mode 100644 module12/hw3/img.png create mode 100644 module12/hw3/runner_and_tournament.py create mode 100644 module12/hw3/runner_test.py create mode 100644 module12/hw3/suit_12_3.py create mode 100644 module12/hw3/tests_12_3.py create mode 100644 module12/hw3/tournament_test.py diff --git a/module12/hw3/img.png b/module12/hw3/img.png new file mode 100644 index 0000000000000000000000000000000000000000..023663d1dcc62d4c77e10b8401f68b841634a01a GIT binary patch literal 63118 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 literal 0 HcmV?d00001 diff --git a/module12/hw3/runner_and_tournament.py b/module12/hw3/runner_and_tournament.py new file mode 100644 index 0000000..9b73368 --- /dev/null +++ b/module12/hw3/runner_and_tournament.py @@ -0,0 +1,39 @@ +class Runner: + def __init__(self, name, speed=5): + self.name = name + self.distance = 0 + self.speed = speed + + def run(self): + self.distance += self.speed * 2 + + def walk(self): + self.distance += self.speed + + def __str__(self): + return self.name + + def __eq__(self, other): + if isinstance(other, str): + return self.name == other + elif isinstance(other, Runner): + return self.name == other.name + + +class Tournament: + def __init__(self, distance, *participants): + self.full_distance = distance + self.participants = list(participants) + + def start(self): + finishers = {} + place = 1 + while self.participants: + for participant in self.participants: + participant.run() + if participant.distance >= self.full_distance: + finishers[place] = participant + place += 1 + self.participants.remove(participant) + + return finishers \ No newline at end of file diff --git a/module12/hw3/runner_test.py b/module12/hw3/runner_test.py new file mode 100644 index 0000000..a62d51b --- /dev/null +++ b/module12/hw3/runner_test.py @@ -0,0 +1,49 @@ +import unittest + +from module12.hw3.runner_and_tournament import Runner + + +class RunnerTest(unittest.TestCase): + """ Тесты для класса Runner """ + + def test_walk(self): + # Создаем объект класса Runner + runner = Runner("TestRunner") + + # Вызываем метод walk 10 раз + for _ in range(10): + runner.walk() + + # Проверяем, что расстояние равно 50 + self.assertEqual(runner.distance, 50) + + + def test_run(self): + # Создаем объект класса Runner + runner = Runner("TestRunner") + + # Вызываем метод run 10 раз + for _ in range(10): + runner.run() + + # Проверяем, что расстояние равно 100 + self.assertEqual(runner.distance, 100) + + + def test_challenge(self): + # Создаем два объекта класса Runner + runner1 = Runner("Runner1") + runner2 = Runner("Runner2") + + # Runner1 бегает, Runner2 ходит + for _ in range(10): + runner1.run() + runner2.walk() + + # Проверяем, что дистанции разные + self.assertNotEqual(runner1.distance, runner2.distance) + + +# Запуск тестов +if __name__ == '__main__': + unittest.main() diff --git a/module12/hw3/suit_12_3.py b/module12/hw3/suit_12_3.py new file mode 100644 index 0000000..79794ba --- /dev/null +++ b/module12/hw3/suit_12_3.py @@ -0,0 +1,23 @@ +# +""" +Задача "Заморозка кейсов": + +Подготовка: + +В этом задании используйте те же TestCase, что и в предыдущем: RunnerTest и TournamentTest. + +Часть 1. TestSuit. + 1. Создайте модуль suite_12_3.py для описания объекта TestSuite. + Укажите на него переменной с произвольным названием. + 2. Добавьте тесты RunnerTest и TournamentTest в этот TestSuit. + 3. Создайте объект класса TextTestRunner, с аргументом verbosity=2. + +Часть 2. Пропуск тестов. + 1. Классы RunnerTest дополнить атрибутом is_frozen = False и TournamentTest атрибутом is_frozen = True. + 2. Напишите соответствующий декоратор к каждому методу (кроме @classmethod), который при значении is_frozen = False будет выполнять тесты, а is_frozen = True - пропускать и выводить сообщение 'Тесты в этом кейсе заморожены'. + +Таким образом вы сможете контролировать пропуск всех тестов в TestCase изменением всего одного атрибута. +Запустите TestSuite и проверьте полученные результаты тестов из обоих TestCase +""" +import unittest +from module12.hw3.tests_12_3 import TournamentTest \ No newline at end of file diff --git a/module12/hw3/tests_12_3.py b/module12/hw3/tests_12_3.py new file mode 100644 index 0000000..ded20fe --- /dev/null +++ b/module12/hw3/tests_12_3.py @@ -0,0 +1,140 @@ +import unittest + +from runner_and_tournament import Runner, Tournament + + +# Декоратор для пропуска тестов, если is_frozen = True +def skip_if_frozen(func): + def wrapper(self, *args, **kwargs): + if getattr(self, 'is_frozen', False): + self.skipTest('Тесты в этом кейсе заморожены') + return func(self, *args, **kwargs) + return wrapper + + +# Обновляем классы тестов +class RunnerTest(unittest.TestCase): + """ Тесты для класса Runner """ + + is_frozen = False # Эти тесты должны выполняться + + + @skip_if_frozen + def test_walk(self): + # Создаем объект класса Runner + runner = Runner("TestRunner") + + # Вызываем метод walk 10 раз + for _ in range(10): + runner.walk() + + # Проверяем, что расстояние равно 50 + self.assertEqual(runner.distance, 50) + + + @skip_if_frozen + def test_run(self): + # Создаем объект класса Runner + runner = Runner("TestRunner") + + # Вызываем метод run 10 раз + for _ in range(10): + runner.run() + + # Проверяем, что расстояние равно 100 + self.assertEqual(runner.distance, 100) + + + @skip_if_frozen + def test_challenge(self): + # Создаем два объекта класса Runner + runner1 = Runner("Runner1") + runner2 = Runner("Runner2") + + # Runner1 бегает, Runner2 ходит + for _ in range(10): + runner1.run() + runner2.walk() + + # Проверяем, что дистанции разные + self.assertNotEqual(runner1.distance, runner2.distance) + + +class TournamentTest(unittest.TestCase): + """ Тесты для класса Tournament """ + + is_frozen = True # Замороженные тесты + + + @classmethod + def setUpClass(cls): + # Создаем атрибут для хранения результатов всех тестов + cls.all_results = {} + + + def setUp(self): + # Создаем объекты бегунов + self.usain = Runner("Усэйн", 10) + self.andrey = Runner("Андрей", 9) + self.nick = Runner("Ник", 3) + + + @classmethod + def tearDownClass(cls): + # Выводим результаты всех тестов после их завершения + for test_name, result in cls.all_results.items(): + # Используем имена бегунов для отображения результатов + finishers = {place: str(participant) for place, participant in result.items()} + print(f"{test_name}: {finishers}") + + + @skip_if_frozen + def test_tournament_usain_and_nick(self): + # Создаем объект Tournament для Усэйна и Ника + tournament = Tournament(90, self.usain, self.nick) + results = tournament.start() + + # Сохраняем результаты в all_results + TournamentTest.all_results["Усэйн и Ник"] = results + + # Проверяем, что Ник последний + self.assertTrue(results[max(results.keys())] == self.nick) + + + @skip_if_frozen + def test_tournament_andrey_and_nick(self): + # Создаем объект Tournament для Андрея и Ника + tournament = Tournament(90, self.andrey, self.nick) + results = tournament.start() + + # Сохраняем результаты в all_results + TournamentTest.all_results["Андрей и Ник"] = results + + # Проверяем, что Ник последний + self.assertTrue(results[max(results.keys())] == self.nick) + + + @skip_if_frozen + def test_tournament_usain_andrey_and_nick(self): + # Создаем объект Tournament для Усэйна, Андрея и Ника + tournament = Tournament(90, self.usain, self.andrey, self.nick) + results = tournament.start() + + # Сохраняем результаты в all_results + TournamentTest.all_results["Усэйн, Андрей и Ник"] = results + + # Проверяем, что Ник последний + self.assertTrue(results[max(results.keys())] == self.nick) + + +# Создание тестового набора +def suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(RunnerTest)) + suite.addTest(unittest.makeSuite(TournamentTest)) + return suite + +# Запуск тестов +if __name__ == '__main__': + runner = unittest.TextTestRunner(verbosity=2) + runner.run(suite()) diff --git a/module12/hw3/tournament_test.py b/module12/hw3/tournament_test.py new file mode 100644 index 0000000..270bdc8 --- /dev/null +++ b/module12/hw3/tournament_test.py @@ -0,0 +1,69 @@ +import unittest + +from module12.hw3.runner_and_tournament import Runner, Tournament + + +class TournamentTest(unittest.TestCase): + + + @classmethod + def setUpClass(cls): + # Создаем атрибут для хранения результатов всех тестов + cls.all_results = {} + + + def setUp(self): + # Создаем объекты бегунов + self.usain = Runner("Усэйн", 10) + self.andrey = Runner("Андрей", 9) + self.nick = Runner("Ник", 3) + + + @classmethod + def tearDownClass(cls): + # Выводим результаты всех тестов после их завершения + for test_name, result in cls.all_results.items(): + # Используем имена бегунов для отображения результатов + finishers = {place: str(participant) for place, participant in result.items()} + print(f"{test_name}: {finishers}") + + + def test_tournament_usain_and_nick(self): + # Создаем объект Tournament для Усэйна и Ника + tournament = Tournament(90, self.usain, self.nick) + results = tournament.start() + + # Сохраняем результаты в all_results + TournamentTest.all_results["Усэйн и Ник"] = results + + # Проверяем, что Ник последний + self.assertTrue(results[max(results.keys())] == self.nick) + + + def test_tournament_andrey_and_nick(self): + # Создаем объект Tournament для Андрея и Ника + tournament = Tournament(90, self.andrey, self.nick) + results = tournament.start() + + # Сохраняем результаты в all_results + TournamentTest.all_results["Андрей и Ник"] = results + + # Проверяем, что Ник последний + self.assertTrue(results[max(results.keys())] == self.nick) + + + def test_tournament_usain_andrey_and_nick(self): + # Создаем объект Tournament для Усэйна, Андрея и Ника + tournament = Tournament(90, self.usain, self.andrey, self.nick) + results = tournament.start() + + # Сохраняем результаты в all_results + TournamentTest.all_results["Усэйн, Андрей и Ник"] = results + + # Проверяем, что Ник последний + self.assertTrue(results[max(results.keys())] == self.nick) + + +# Запуск тестов +if __name__ == '__main__': + unittest.main() From 3c66ae70e81abeac7fc58442c0d147bfef1abcce Mon Sep 17 00:00:00 2001 From: SevenLightnapper Date: Sun, 13 Oct 2024 04:15:31 +0300 Subject: [PATCH 2/2] module12 hw3 completed --- module12/hw3/runner_test.py | 49 -------------- module12/hw3/{suit_12_3.py => suite_12_3.py} | 15 ++++- module12/hw3/tests_12_3.py | 13 ---- module12/hw3/tournament_test.py | 69 -------------------- 4 files changed, 14 insertions(+), 132 deletions(-) delete mode 100644 module12/hw3/runner_test.py rename module12/hw3/{suit_12_3.py => suite_12_3.py} (79%) delete mode 100644 module12/hw3/tournament_test.py diff --git a/module12/hw3/runner_test.py b/module12/hw3/runner_test.py deleted file mode 100644 index a62d51b..0000000 --- a/module12/hw3/runner_test.py +++ /dev/null @@ -1,49 +0,0 @@ -import unittest - -from module12.hw3.runner_and_tournament import Runner - - -class RunnerTest(unittest.TestCase): - """ Тесты для класса Runner """ - - def test_walk(self): - # Создаем объект класса Runner - runner = Runner("TestRunner") - - # Вызываем метод walk 10 раз - for _ in range(10): - runner.walk() - - # Проверяем, что расстояние равно 50 - self.assertEqual(runner.distance, 50) - - - def test_run(self): - # Создаем объект класса Runner - runner = Runner("TestRunner") - - # Вызываем метод run 10 раз - for _ in range(10): - runner.run() - - # Проверяем, что расстояние равно 100 - self.assertEqual(runner.distance, 100) - - - def test_challenge(self): - # Создаем два объекта класса Runner - runner1 = Runner("Runner1") - runner2 = Runner("Runner2") - - # Runner1 бегает, Runner2 ходит - for _ in range(10): - runner1.run() - runner2.walk() - - # Проверяем, что дистанции разные - self.assertNotEqual(runner1.distance, runner2.distance) - - -# Запуск тестов -if __name__ == '__main__': - unittest.main() diff --git a/module12/hw3/suit_12_3.py b/module12/hw3/suite_12_3.py similarity index 79% rename from module12/hw3/suit_12_3.py rename to module12/hw3/suite_12_3.py index 79794ba..ad2a92e 100644 --- a/module12/hw3/suit_12_3.py +++ b/module12/hw3/suite_12_3.py @@ -20,4 +20,17 @@ Запустите TestSuite и проверьте полученные результаты тестов из обоих TestCase """ import unittest -from module12.hw3.tests_12_3 import TournamentTest \ No newline at end of file +from tests_12_3 import TournamentTest, RunnerTest + + +# Создание тестового набора +def suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(RunnerTest)) + suite.addTest(unittest.makeSuite(TournamentTest)) + return suite + +# Запуск тестов +if __name__ == '__main__': + runner = unittest.TextTestRunner(verbosity=2) + runner.run(suite()) \ No newline at end of file diff --git a/module12/hw3/tests_12_3.py b/module12/hw3/tests_12_3.py index ded20fe..eb2b3ce 100644 --- a/module12/hw3/tests_12_3.py +++ b/module12/hw3/tests_12_3.py @@ -125,16 +125,3 @@ def test_tournament_usain_andrey_and_nick(self): # Проверяем, что Ник последний self.assertTrue(results[max(results.keys())] == self.nick) - - -# Создание тестового набора -def suite(): - suite = unittest.TestSuite() - suite.addTest(unittest.makeSuite(RunnerTest)) - suite.addTest(unittest.makeSuite(TournamentTest)) - return suite - -# Запуск тестов -if __name__ == '__main__': - runner = unittest.TextTestRunner(verbosity=2) - runner.run(suite()) diff --git a/module12/hw3/tournament_test.py b/module12/hw3/tournament_test.py deleted file mode 100644 index 270bdc8..0000000 --- a/module12/hw3/tournament_test.py +++ /dev/null @@ -1,69 +0,0 @@ -import unittest - -from module12.hw3.runner_and_tournament import Runner, Tournament - - -class TournamentTest(unittest.TestCase): - - - @classmethod - def setUpClass(cls): - # Создаем атрибут для хранения результатов всех тестов - cls.all_results = {} - - - def setUp(self): - # Создаем объекты бегунов - self.usain = Runner("Усэйн", 10) - self.andrey = Runner("Андрей", 9) - self.nick = Runner("Ник", 3) - - - @classmethod - def tearDownClass(cls): - # Выводим результаты всех тестов после их завершения - for test_name, result in cls.all_results.items(): - # Используем имена бегунов для отображения результатов - finishers = {place: str(participant) for place, participant in result.items()} - print(f"{test_name}: {finishers}") - - - def test_tournament_usain_and_nick(self): - # Создаем объект Tournament для Усэйна и Ника - tournament = Tournament(90, self.usain, self.nick) - results = tournament.start() - - # Сохраняем результаты в all_results - TournamentTest.all_results["Усэйн и Ник"] = results - - # Проверяем, что Ник последний - self.assertTrue(results[max(results.keys())] == self.nick) - - - def test_tournament_andrey_and_nick(self): - # Создаем объект Tournament для Андрея и Ника - tournament = Tournament(90, self.andrey, self.nick) - results = tournament.start() - - # Сохраняем результаты в all_results - TournamentTest.all_results["Андрей и Ник"] = results - - # Проверяем, что Ник последний - self.assertTrue(results[max(results.keys())] == self.nick) - - - def test_tournament_usain_andrey_and_nick(self): - # Создаем объект Tournament для Усэйна, Андрея и Ника - tournament = Tournament(90, self.usain, self.andrey, self.nick) - results = tournament.start() - - # Сохраняем результаты в all_results - TournamentTest.all_results["Усэйн, Андрей и Ник"] = results - - # Проверяем, что Ник последний - self.assertTrue(results[max(results.keys())] == self.nick) - - -# Запуск тестов -if __name__ == '__main__': - unittest.main()