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)
示例#2
0
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)
示例#3
0
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)
示例#5
0
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)