【发布时间】:2016-12-28 14:19:43
【问题描述】:
我真的很努力在测试驱动的基本骰子游戏中实现模拟对象。但是,当我运行测试时(见下文),它显示“AttributeError”,我只是不明白为什么?
这是我的单元测试 (test_game.py) 实现:
from unittest import TestCase, mock
import game
class GameTest(TestCase):
def test_get_player_names(self):
"""Players can enter their names"""
fake_input = mock.Mock(side_effect=['A', 'M', 'Z', ''])
with mock.patch('builtins.input', fake_input):
names = game.get_player_names()
self.assertEqual(names, ['A', 'M', 'Z'])
def test_get_player_names_stdout(self):
"""Check the prompts for player names"""
with mock.patch('builtins.input', side_effect=['A', 'B', '']) as fake:
game.get_player_names()
fake.assert_has_calls([
mock.call("Player 1's name: "),
mock.call("Player 2's name: "),
mock.call("Player 3's name: ")
])
这是我在 Python 中的实际代码 (game.py):
class Dice:
def __init__(self, *players):
self.players = players
def get_players(self):
"""Return a tuple of all players"""
return self.players
def get_player_names():
"""Prompt for player names"""
names = []
while True:
value = input("Player {}'s name: ".format(len(names) + 1))
if not value:
break
names.append(value)
return names
测试错误显示 (PowerShell):
PS C:\Users\Seun\desktop\dice> python -m unittest
-------------------------------------------------- --------------------
在 0.000 秒内运行 0 次测试
好的
PS C:\Users\Seun\desktop\dice> python3 -m unittest
EE。
==================================================== =====================
错误:test_get_player_names (test_game.GameTest)
玩家可以输入他们的名字
-------------------------------------------------- --------------------
回溯(最近一次通话最后):
文件“C:\Users\Seun\desktop\dice\test_game.py”,第 19 行,在 test_get_player_names
名称 = game.get_player_names()
AttributeError:模块“游戏”没有属性“get_player_names”
==================================================== =====================
错误:test_get_player_names_stdout (test_game.GameTest)
检查玩家姓名的提示
-------------------------------------------------- --------------------
回溯(最近一次通话最后):
文件“C:\Users\Seun\desktop\dice\test_game.py”,第 27 行,在 test_get_player_names_stdout
game.get_player_names()
AttributeError:模块“游戏”没有属性“get_player_names”
-------------------------------------------------- --------------------
在 0.009 秒内运行 3 次测试
失败(错误=2)
【问题讨论】:
-
游戏在哪里初始化,你导入游戏但是代码在哪里?
-
第二个代码集——game.py
标签: python unit-testing tdd