我正在创建一个刽子手游戏。实例方法resolve_game_status
根据猜测的总数检查游戏是应该结束还是继续。如果游戏可以继续,该函数将返回一个字符串,显示匹配的那些猜测字母。当类被实例化时填充属性self.guesses
和。self.game_word
Game
所以我希望对resolve_game_status
. 鉴于该方法依赖于这两个属性,我不确定如何真正设置测试以实现此目标。
class Game:
def __init__(self):
self.guesses = []
self.game_word = choice(game_words)
def get_player_guess(self):
pass
def resolve_game_status(self):
pass
'''Access self.guesses & self.game_word from here```
class TestGameStatus(TestCase):
'''Verify that the game word string shows only
those letters that are guessed if the game is ongoing.'''
def setUp(self):
self.game = Game()
def test_hangman_revealed_letter_matches(self):
with patch.object(
self.game, 'game_word', new_callable=PropertyMock
) as mock_game_word:
with patch.object(
self.'guesses', new_callable=PropertyMock
) as mock_guesses:
guesses = [
Guess('a', 'miss'), Guess('p', 'hit'), Guess('o', 'hit')
]
mock_game_word.return_value = "python"
mock_guesses.return_value = guesses
updated_hangman_string = self.game.resolve_game_status()
self.assertEqual(updated_hangman_string, "p _ _ _ o _")
不需要随机选择一个词。创建一个选择随机单词并将其作为参数传递给 的类方法__init__
。
class Game:
def __init__(self, word):
self.guesses = []
self.game_word = word
@classmethod
def with_random_word(cls):
return cls(choice(game_words))
...
现在您可以通过简单地传递一个已知单词来进行测试
class TestGameStatus(TestCase):
'''Verify that the game word string shows only
those letters that are guessed if the game is ongoing.'''
def setUp(self):
self.game = Game("python")
def test_hangman_revealed_letter_matches(self):
self.game.guesses = [
Guess('a', 'miss'), Guess('p', 'hit'), Guess('o', 'hit')
]
updated_hangman_string = self.game.resolve_game_status()
self.assertEqual(updated_hangman_string, "p _ _ _ o _")
因为Game
每次测试都会创建一个新的实例,所以不需要使用mock.patch
改变 的值self.guesses
;直接赋值就行了。
在实际代码中,您将简单地使用Game.with_random_word()
而不是Game
直接实例化。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句