我正在編寫Python中的tic-tat-toe的單元測試。當我注意到我的遊戲對象沒有重新實現每種方法時,我一直非常困惑。Python中新實例的初始化
這裏什麼我談論:
def test_satisfactory_field_occupation(self):
play = tictactoe.Play()
play.make_move("+", 1, 1)
self.assertEqual(play.check_satisfaction(1, 1), "Field has been already occupied, try again")
def test_satisfactory_success(self):
play = tictactoe.Play()
self.assertEqual(play.check_satisfaction(1, 1), "Ok")
我捕獲的異常:
FAIL: test_satisfactory_success (__main__.TestPlay)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/sergei_rudenkov/PycharmProjects/hello_world/tic-tac-toe/tictactoe_test.py", line 23, in test_satisfactory_success
self.assertEqual(play.check_satisfaction(1, 1), "Ok")
AssertionError: 'Field has been already occupied, try again' != 'Ok'
的遊戲類是:
class Play(object):
game = [['-', '-', '-'],
['-', '-', '-'],
['-', '-', '-']]
move_count = 1
finished = False
def __str__(self):
return "\n".join(map(str, self.game))
def check_finished(self):
result = False
for i in range(2):
if self.game[i][0] == self.game[i][1] == self.game[i][2] != '-':
result = self.game[i][0]
elif self.game[0][i] == self.game[1][i] == self.game[2][i] != '-':
result = self.game[i][0]
if self.game[0][0] == self.game[1][1] == self.game[2][2] != '-':
return self.game[0][0]
elif self.game[0][2] == self.game[1][1] == self.game[2][0] != '-':
return self.game[0][2]
elif not any("-" in row for row in self.game):
return "Draw"
else:
return result
def make_move(self, sign, x, y):
self.game[x][y] = sign
self.move_count += 1
self.finished = self.check_finished()
print self
def check_satisfaction(self, x, y):
try:
x, y = int(x), int(y)
except ValueError:
return "Please enter integers, try again"
if not (0 <= x <= 2 and 0 <= y <= 2):
return "Arguments greater then 2 or less then 0 are not allowed, try again"
if self.game[x][y] != '-':
return "Field has been already occupied, try again"
return "Ok"
def winner(self):
if self.finished == '+':
return "First player (+) has won!"
elif self.finished == '0':
return "Second player (0) has won!"
elif self.finished == 'Draw':
return "The result is draw!"
請正確理解我:我來自java並被認爲每種方法都有它自己的堆棧,但我所看到的非常令我驚訝。有人能幫我理解發生了什麼嗎?
你能解釋一下你期待的行爲嗎?這個問題並不清楚。 –
你說得對,但我稱'play = tictactoe.Play()'不等於'java''new SomeObject()'關鍵字語句嗎? –
我可以看到你的測試沒有錯。你確定,'play.check_satisfaction(1,1)'不是*總是*返回'Field has been ...',即使是* new *'Play'?向我們展示'Play .__ init__'和'Play.check_satisfaction'。 – 2016-02-26 14:30:14