class BowlingScoreTest (unittest.TestCase): def setUp(self): self.bowling_score = BowlingScore() def test_get_score_normal(self): self.bowling_score.get_score("555555") self.assertEqual(self.bowling_score.result, 30) def test_get_score_strike(self): self.bowling_score.get_score("XXX") self.assertEqual(self.bowling_score.result, 60) def test_get_score_spare(self): self.bowling_score.get_score("5/5/5/") self.assertEqual(self.bowling_score.result, 45) def test_check_frame_normal(self): result = self.bowling_score._check_frame('555555') self.assertEqual(result, True) def test_check_frame_lage_error(self): result = self.bowling_score._check_frame('5555555') self.assertEqual(result, False) def test_check_frame_small_error(self): result = self.bowling_score._check_frame('5555') self.assertFalse(result) def test_check_input_data_normal(self): self.assertRaises(Exception, self.bowling_score._check_input_data, '4//555')
def setUp(self): self.bowling_score = BowlingScore()
# Надо написать python-модуль (назвать bowling), предоставляющий API расчета количества очков: # функцию get_score, принимающую параметр game_result. Функция должна выбрасывать исключения, # когда game_result содержит некорректные данные. Использовать стандартные исключения по максимуму, # если не хватает - создать свои. # # Обязательно написать тесты на этот модуль. Расположить в папке tests. # Из текущего файла сделать консольную утилиту для определения количества очков, с помощью пакета argparse # Скрипт должен принимать параметр --result и печатать на консоль: # Количество очков для результатов ХХХ - УУУ. import argparse from bowling import BowlingScore if __name__ == '__main__': # 42174/34723/X21X33 - 109 # X41XX454235-X1/4/ - 138 # 1-7-2-511651-X7-7-6/ - 78 # 6/5/5-8-9/5/35631--- - 91 parser = argparse.ArgumentParser( description='User result of a bowling game') parser.add_argument('-r', '--result', type=str, help='Result') args = parser.parse_args() game = BowlingScore(args.result) game.run() # При написании кода помнить, что заказчик может захотеть доработок и новых возможностей... # И, возможно, вам пригодится паттерн проектирования "Состояние", # см https://clck.ru/Fudd8 и https://refactoring.guru/ru/design-patterns/state #зачет!
def test(self): game = BowlingScore('42174/34723/X21X33') result = game.run() self.assertEqual(result, 109)
def test_strike_error(self): game = BowlingScore('1X174/34723/X21X33') result = game.run() self.assertEqual(result, StrikeError)
def test_not_enough_frames(self): game = BowlingScore('174/34723/X21X33') result = game.run() self.assertEqual(result, NotEnoughFrames)
def test_value_error_3(self): game = BowlingScore('/6174/34723/X21X33') result = game.run() self.assertEqual(result, ValueError)