class BowlingTestSuite(unittest.TestCase): def setUp(self): self.uut = Bowling() def test_roll_gutter_game(self): self.roll([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(self.uut.score(), 0) def test_roll_all_ones(self): self.roll([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) self.assertEqual(self.uut.score(), 20) def test_roll_spare_followed_by_five(self): """ First frame is worth 15 points, second frame adds 5 for 20 total """ self.roll([7, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(20, self.uut.score()) def test_roll_strike_followed_by_two_and_three(self): """ As the first ball of frame one is a strike, the total for the frame should be the sum of the strike plus the next two rolls. Frame one is worth 15 points, frame 2 is worth 5 points, for 20 total Returns: """ self.roll([10, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(20, self.uut.score()) def test_played_perfect_game(self): self.roll([10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]) self.assertEqual(300, self.uut.score()) def test_sample_game_scores(self): self.roll([1, 4, 4, 5, 6, 4, 5, 5, 10, 0, 1, 7, 3, 6, 4, 10, 2, 8, 6]) self.assertEqual(133, self.uut.score()) def roll(self, pins_down: list): for i in pins_down: self.uut.roll(i)
class Test(unittest.TestCase): def setUp(self): # given self.b = Bowling() def tearDown(self): pass def _repeatRoll(self, n, pins): for i in range(n): self.b.roll(pins) # 문제에서 기본으로 주어진 테스트 def testOneStrike(self): # when self.b.roll(10) # then self.assertEqual(['X','','','','','','','','','','','','','','','','','','','',''], self.b.getSymbols()) self.assertEqual(['','','','','','','','','',''], self.b.getScores()) def testNormals(self): # when self.b.roll(10) self.b.roll(7) self.b.roll(2) # then self.assertEqual(['X','',7,2,'','','','','','','','','','','','','','','','',''], self.b.getSymbols()) self.assertEqual([19,28,'','','','','','','',''], self.b.getScores()) def testSpare(self): # when self.b.roll(10) self.b.roll(7) self.b.roll(2) self.b.roll(7) self.b.roll(3) #then self.assertEqual(['X','',7,2,7,'/','','','','','','','','','','','','','','',''], self.b.getSymbols()) self.assertEqual([19,28,'','','','','','','',''], self.b.getScores()) def testLastSpare(self): # when self.b.roll(10) self.b.roll(7) self.b.roll(2) self.b.roll(7) self.b.roll(3) self.b.roll(9) self.b.roll(0) #then self.assertEqual(['X','',7,2,7,'/',9,'-','','','','','','','','','','','','',''], self.b.getSymbols()) self.assertEqual([19,28,47,56,'','','','','',''], self.b.getScores()) def testFoul(self): # when self.b.roll(10) self.b.roll(7) self.b.roll(2) self.b.roll(7) self.b.roll(3) self.b.roll(9) self.b.roll(0) self.b.roll(8) self.b.roll(2) self.b.roll(10) self.b.roll(7) self.b.roll(1) self.b.roll(9) self.b.roll(0) self.b.roll(9) self.b.roll('F') #then self.assertEqual(['X','',7,2,7,'/',9,'-',8,'/','X','',7,1,9,'-',9,'F','','',''], self.b.getSymbols()) self.assertEqual([19,28,47,56,76,94,102,111,120,''], self.b.getScores()) def testFinish(self): # when self.b.roll(10) self.b.roll(7) self.b.roll(2) self.b.roll(7) self.b.roll(3) self.b.roll(9) self.b.roll(0) self.b.roll(8) self.b.roll(2) self.b.roll(10) self.b.roll(7) self.b.roll(1) self.b.roll(9) self.b.roll(0) self.b.roll(9) self.b.roll('F') self.b.roll(9) self.b.roll(1) self.b.roll(9) #then print self.b.getSymbols() self.assertEqual(['X','',7,2,7,'/',9,'-',8,'/','X','',7,1,9,'-',9,'F',9,'/',9], self.b.getSymbols()) self.assertEqual([19,28,47,56,76,94,102,111,120,139], self.b.getScores()) # 개인적으로 추가해본 테스트케이스들 def testTurkey(self): # when self._repeatRoll(3, 10) # then self.assertEqual(['X','','X','','X','','','','','','','','','','','','','','','',''], self.b.getSymbols()) self.assertEqual([30,'','','','','','','','',''], self.b.getScores()) def test9Combo(self): # when self._repeatRoll(9, 10) # then self.assertEqual(['X','','X','','X','','X','','X','','X','','X','','X','','X','','','',''], self.b.getSymbols()) self.assertEqual([30,60,90,120,150,180,210,'','',''], self.b.getScores()) def test10Combo(self): # when self._repeatRoll(10, 10) # then self.assertEqual(['X','','X','','X','','X','','X','','X','','X','','X','','X','','X','',''], self.b.getSymbols()) self.assertEqual([30,60,90,120,150,180,210,240,'',''], self.b.getScores()) def test11Combo(self): # when self._repeatRoll(11, 10) # then self.assertEqual(['X','','X','','X','','X','','X','','X','','X','','X','','X','','X','X',''], self.b.getSymbols()) self.assertEqual([30,60,90,120,150,180,210,240,270,''], self.b.getScores()) def testPerfectGame(self): # when self._repeatRoll(12, 10) # then self.assertEqual(['X','','X','','X','','X','','X','','X','','X','','X','','X','','X','X','X'], self.b.getSymbols()) self.assertEqual([30,60,90,120,150,180,210,240,270,300], self.b.getScores()) def testMissOne(self): # when self._repeatRoll(11, 10) self.b.roll(9) # then self.assertEqual(['X','','X','','X','','X','','X','','X','','X','','X','','X','','X','X',9], self.b.getSymbols()) self.assertEqual([30,60,90,120,150,180,210,240,270,299], self.b.getScores()) def testLastNoBonus(self): # when self._repeatRoll(9, 10) self.b.roll(9) self.b.roll(0) # then self.assertEqual(['X','','X','','X','','X','','X','','X','','X','','X','','X','',9,'-',''], self.b.getSymbols()) self.assertEqual([30,60,90,120,150,180,210,239,258,267], self.b.getScores()) def testLastStrikeSpare(self): # when self._repeatRoll(10, 10) self.b.roll(5) self.b.roll(5) # then self.assertEqual(['X','','X','','X','','X','','X','','X','','X','','X','','X','','X',5,'/'], self.b.getSymbols()) self.assertEqual([30,60,90,120,150,180,210,240,265,285], self.b.getScores()) def testLastSpareStrike(self): # when self._repeatRoll(9, 10) self.b.roll(5) self.b.roll(5) self.b.roll(10) # then self.assertEqual(['X','','X','','X','','X','','X','','X','','X','','X','','X','',5,'/','X'], self.b.getSymbols()) self.assertEqual([30,60,90,120,150,180,210,235,255,275], self.b.getScores()) def testNineSpareTenStrikes(self): # when self._repeatRoll(8, 10) self.b.roll(5) self.b.roll(5) self._repeatRoll(9, 10) # 3번만 해도 되는데 게임 끝났는지 로직이 잘되나 확인. # then self.assertEqual(['X','','X','','X','','X','','X','','X','','X','','X','',5,'/','X','X','X'], self.b.getSymbols()) self.assertEqual([30,60,90,120,150,180,205,225,245,275], self.b.getScores()) # 잘못된 수를 넣었을 때 Exception이 발생하는 지 여부. # 참조 : http://stackoverflow.com/questions/156503/how-do-you-assert-that-a-certain-exception-is-thrown-in-junit-4-tests # 질문 부분만 소스에서 참조함. def testValueError(self): thrown = False try: self.b.roll(-1) self.b.roll(11) except Exception: thrown = True self.assertTrue(thrown) def testValueError2(self): thrown = False try: self.b.roll('G') except Exception: thrown = True self.assertTrue(thrown) def testSpareError(self): thrown = False try: self.b.roll(5) self.b.roll(6) except Exception: thrown = True self.assertTrue(thrown) def testLastSpareError(self): thrown = False self._repeatRoll(10, 10) try: self.b.roll(5) self.b.roll(6) except Exception: thrown = True self.assertTrue(thrown)
class TestBowling(unittest.TestCase): def setUp(self): self.bowling = Bowling() def test_gutter(self): self.bowling.roll(0) self.assertEqual(self.bowling.score(), 0) def test_one_roll(self): self.bowling.roll(7) self.assertEqual(self.bowling.score(), 7) def test_two_rolls(self): self.bowling.roll(2) self.bowling.roll(3) self.assertEqual(self.bowling.score(), 5) def test_two_rolls_with_spare(self): self.bowling.roll(3) self.bowling.roll(7) self.assertEqual(self.bowling.score(), 10) self.bowling.roll(1) self.assertEqual(self.bowling.score(), 12) def test_two_rolls_with_strike(self): self.bowling.roll(10) self.assertEqual(self.bowling.score(), 10) self.bowling.roll(1) self.bowling.roll(3) self.assertEqual(self.bowling.score(), 18) def test_two_rolls_with_2_strike(self): self.bowling.roll(10) self.assertEqual(self.bowling.score(), 10) self.bowling.roll(10) self.assertEqual(self.bowling.score(), 30) self.bowling.roll(1) self.bowling.roll(3) self.assertEqual(self.bowling.score(), 38) def test_frame(self): self.bowling.roll(1) self.bowling.roll(2) self.assertEqual(self.bowling.frames, [[1,2]])
class TestBowling(unittest.TestCase): def setUp(self): self.game = Bowling() # Gutter game scores zero # When you roll all misses, you get a total score of zero. def test_gutter_game(self): for i in range(23): self.game.roll(0) self.assertEqual(self.game.score(), 0) # All ones scores 20 # When you knock down one pin with each ball, your total score is 20 def test_1_pin_each_roll(self): for i in range(23): self.game.roll(1) self.assertEqual(self.game.score(), 20) # A spare in the first frame, followed by three pins, # followed by all misses scores 16 def test_score_a_spare(self): self.game.roll(4) self.game.roll(6) self.game.roll(3) for i in range(20): self.game.roll(0) self.assertEqual(self.game.score(), 16) # A strike in the first frame, followed by three and then four pins, # followed by all misses, scores 24 def test_score_a_strike(self): self.game.roll(10) self.game.roll(3) self.game.roll(4) for i in range(20): self.game.roll(0) self.assertEqual(self.game.score(), 24) # 3 strikes followed by all misses, scores 60 def test_score_3_strike(self): self.game.roll(10) self.game.roll(10) self.game.roll(10) for i in range(18): self.game.roll(0) self.assertEqual(self.game.score(), 60) # 3 strikes followed by all misses, scores 60 def test_score_2_strike(self): self.game.roll(10) self.game.roll(10) self.game.roll(5) self.game.roll(5) for i in range(18): self.game.roll(0) self.assertEqual(self.game.score(), 55) # 1 spare, 1 strikes, 1 spare, 1 meh followed by all misses, scores 60 def test_score_mixed(self): self.game.roll(5) self.game.roll(5) self.game.roll(10) self.game.roll(5) self.game.roll(5) self.game.roll(5) self.game.roll(0) for i in range(16): self.game.roll(0) self.assertEqual(self.game.score(), 60) # A perfect game (12 strikes) scores 300 def test_score_a_perfect_game(self): for i in range(12): self.game.roll(10) self.assertEqual(self.game.score(), 300) # Almost perfect game (10 strikes) scores 270 def test_score_an_almost_perfect_game(self): for i in range(10): self.game.roll(10) self.game.roll(0) self.game.roll(0) self.assertEqual(self.game.score(), 270)
class Test(unittest.TestCase): def setUp(self): # given self.b = Bowling() def tearDown(self): pass def _repeatRoll(self, n, pins): for i in range(n): self.b.roll(pins) # 문제에서 기본으로 주어진 테스트 def testOneStrike(self): # when self.b.roll(10) # then self.assertEqual([ 'X', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ], self.b.getSymbols()) self.assertEqual(['', '', '', '', '', '', '', '', '', ''], self.b.getScores()) def testNormals(self): # when self.b.roll(10) self.b.roll(7) self.b.roll(2) # then self.assertEqual([ 'X', '', 7, 2, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ], self.b.getSymbols()) self.assertEqual([19, 28, '', '', '', '', '', '', '', ''], self.b.getScores()) def testSpare(self): # when self.b.roll(10) self.b.roll(7) self.b.roll(2) self.b.roll(7) self.b.roll(3) #then self.assertEqual([ 'X', '', 7, 2, 7, '/', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ], self.b.getSymbols()) self.assertEqual([19, 28, '', '', '', '', '', '', '', ''], self.b.getScores()) def testLastSpare(self): # when self.b.roll(10) self.b.roll(7) self.b.roll(2) self.b.roll(7) self.b.roll(3) self.b.roll(9) self.b.roll(0) #then self.assertEqual([ 'X', '', 7, 2, 7, '/', 9, '-', '', '', '', '', '', '', '', '', '', '', '', '', '' ], self.b.getSymbols()) self.assertEqual([19, 28, 47, 56, '', '', '', '', '', ''], self.b.getScores()) def testFoul(self): # when self.b.roll(10) self.b.roll(7) self.b.roll(2) self.b.roll(7) self.b.roll(3) self.b.roll(9) self.b.roll(0) self.b.roll(8) self.b.roll(2) self.b.roll(10) self.b.roll(7) self.b.roll(1) self.b.roll(9) self.b.roll(0) self.b.roll(9) self.b.roll('F') #then self.assertEqual([ 'X', '', 7, 2, 7, '/', 9, '-', 8, '/', 'X', '', 7, 1, 9, '-', 9, 'F', '', '', '' ], self.b.getSymbols()) self.assertEqual([19, 28, 47, 56, 76, 94, 102, 111, 120, ''], self.b.getScores()) def testFinish(self): # when self.b.roll(10) self.b.roll(7) self.b.roll(2) self.b.roll(7) self.b.roll(3) self.b.roll(9) self.b.roll(0) self.b.roll(8) self.b.roll(2) self.b.roll(10) self.b.roll(7) self.b.roll(1) self.b.roll(9) self.b.roll(0) self.b.roll(9) self.b.roll('F') self.b.roll(9) self.b.roll(1) self.b.roll(9) #then print self.b.getSymbols() self.assertEqual([ 'X', '', 7, 2, 7, '/', 9, '-', 8, '/', 'X', '', 7, 1, 9, '-', 9, 'F', 9, '/', 9 ], self.b.getSymbols()) self.assertEqual([19, 28, 47, 56, 76, 94, 102, 111, 120, 139], self.b.getScores()) # 개인적으로 추가해본 테스트케이스들 def testTurkey(self): # when self._repeatRoll(3, 10) # then self.assertEqual([ 'X', '', 'X', '', 'X', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ], self.b.getSymbols()) self.assertEqual([30, '', '', '', '', '', '', '', '', ''], self.b.getScores()) def test9Combo(self): # when self._repeatRoll(9, 10) # then self.assertEqual([ 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', '', '', '' ], self.b.getSymbols()) self.assertEqual([30, 60, 90, 120, 150, 180, 210, '', '', ''], self.b.getScores()) def test10Combo(self): # when self._repeatRoll(10, 10) # then self.assertEqual([ 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', '' ], self.b.getSymbols()) self.assertEqual([30, 60, 90, 120, 150, 180, 210, 240, '', ''], self.b.getScores()) def test11Combo(self): # when self._repeatRoll(11, 10) # then self.assertEqual([ 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', 'X', '' ], self.b.getSymbols()) self.assertEqual([30, 60, 90, 120, 150, 180, 210, 240, 270, ''], self.b.getScores()) def testPerfectGame(self): # when self._repeatRoll(12, 10) # then self.assertEqual([ 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', 'X', 'X' ], self.b.getSymbols()) self.assertEqual([30, 60, 90, 120, 150, 180, 210, 240, 270, 300], self.b.getScores()) def testMissOne(self): # when self._repeatRoll(11, 10) self.b.roll(9) # then self.assertEqual([ 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', 'X', 9 ], self.b.getSymbols()) self.assertEqual([30, 60, 90, 120, 150, 180, 210, 240, 270, 299], self.b.getScores()) def testLastNoBonus(self): # when self._repeatRoll(9, 10) self.b.roll(9) self.b.roll(0) # then self.assertEqual([ 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 9, '-', '' ], self.b.getSymbols()) self.assertEqual([30, 60, 90, 120, 150, 180, 210, 239, 258, 267], self.b.getScores()) def testLastStrikeSpare(self): # when self._repeatRoll(10, 10) self.b.roll(5) self.b.roll(5) # then self.assertEqual([ 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', 5, '/' ], self.b.getSymbols()) self.assertEqual([30, 60, 90, 120, 150, 180, 210, 240, 265, 285], self.b.getScores()) def testLastSpareStrike(self): # when self._repeatRoll(9, 10) self.b.roll(5) self.b.roll(5) self.b.roll(10) # then self.assertEqual([ 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 5, '/', 'X' ], self.b.getSymbols()) self.assertEqual([30, 60, 90, 120, 150, 180, 210, 235, 255, 275], self.b.getScores()) def testNineSpareTenStrikes(self): # when self._repeatRoll(8, 10) self.b.roll(5) self.b.roll(5) self._repeatRoll(9, 10) # 3번만 해도 되는데 게임 끝났는지 로직이 잘되나 확인. # then self.assertEqual([ 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 'X', '', 5, '/', 'X', 'X', 'X' ], self.b.getSymbols()) self.assertEqual([30, 60, 90, 120, 150, 180, 205, 225, 245, 275], self.b.getScores()) # 잘못된 수를 넣었을 때 Exception이 발생하는 지 여부. # 참조 : http://stackoverflow.com/questions/156503/how-do-you-assert-that-a-certain-exception-is-thrown-in-junit-4-tests # 질문 부분만 소스에서 참조함. def testValueError(self): thrown = False try: self.b.roll(-1) self.b.roll(11) except Exception: thrown = True self.assertTrue(thrown) def testValueError2(self): thrown = False try: self.b.roll('G') except Exception: thrown = True self.assertTrue(thrown) def testSpareError(self): thrown = False try: self.b.roll(5) self.b.roll(6) except Exception: thrown = True self.assertTrue(thrown) def testLastSpareError(self): thrown = False self._repeatRoll(10, 10) try: self.b.roll(5) self.b.roll(6) except Exception: thrown = True self.assertTrue(thrown)