def testGameHasScoreOfOneWithFirstRollOfOnePin(self): game = Game() game.roll(1) assert game.score == 1At this point the tests no longer pass because the Game class does not have a roll method. My first attempt to add the roll method to my Game class failed:
def roll(pins): score += pinsHere is the error that was printed:
E.
======================================================================
ERROR: testGameHasScoreOfOneWithFirstRollOfOnePin (__main__.TestGame)
----------------------------------------------------------------------
Traceback (most recent call last):
File "TestGame.py", line 13, in testGameHasScoreOfOneWithFirstRollOfOnePin
game.roll(1)
TypeError: roll() takes exactly 1 positional argument (2 given)
----------------------------------------------------------------------
Ran 2 tests in 0.002s
FAILED (errors=1)
This is a very confusing error when you are unfamiliar with the language. Clearly I am passing in one argument to a method that takes one argument. What in the world?? The way that methods work in Python is that the object is passed as the first argument of the function. So essentially, the method call acts like game.roll(game, 1) though it is not actually called this way. What is needed is to change the method definition. My updated roll method:
def roll(self, pins): self.score += pinsBoth of my tests now pass:
..
----------------------------------------------------------------------
Ran 2 tests in 0.002s
OK
No comments:
Post a Comment