私はPythonを学ぶために作ったテキストベースのゲームをテストしています。最後の数日、私は遭遇し続ける問題の解決法を見つけるのに忙しかった。私は複数のテスト方法を試しましたが、それらはすべて私に同じエラーを与えてしまいます。py.testで2つの辞書の戻り値をアサートしようとするとAssertionErrorが発生する
問題が下記てAssertionError(py.test
を使用して)である:明らか
E AssertionError: assert <Textgame.Waffle.WineFields object at 0x03BDECD0> ==
<Textgame.Waffle.WineFields object at 0x03BD00D0>
、オブジェクト(Textgame.Waffle.WineFields
)が正確であるが、位置が異なっています。私はその場所を気にしない。私は同じ内容の2つの別々の辞書を使っているからです。しかし、可能であればこの辞書を使い続けることを望んでいます。次のように
テストの最小限の作業例が見えます:
import Textgame.Waffle
def test_change_map():
roomnames = {
"the wine fields" : Textgame.Waffle.WineFields(),
}
room = "the wine fields"
next_room = roomnames[room]
assert Textgame.Waffle.Map(room).change(room) == next_room
私はこのようなルックスを主張しようとしているTextgame.Waffleゲーム:
class WineFields(object):
pass
class Map(object):
roomnames = {
'the wine fields': WineFields(),
}
def __init__(self, next_one):
self.next_one = next_one
def change(self, next_one):
return Map.roomnames[next_one]
私はいくつかのメソッドにを試してみましたたとえば、
def __eq__(self, other):
return self.next_one == other.next
をMapクラス内で使用して解決しますが、間違って配置するか、私はこの問題にまったく使用すべきではありません。
Learn Python the Hard Way, Ex 49 : Comparing objects using assert_equal
は、誰かが私は私が手出力は、私が期待するものであることを主張し、場所かどうかを心配することはできませんどのように私に説明してもらえ:私は、ほぼ同じ問題に別のStackOverflowのページからこのアイデアを得ました同じです?
質問に受け入れ答えを複製しました。他の問題と同じ値を持つ属性を追加し、 'WineFields'クラスに' __eq__'メソッドを追加する必要があります。 – quamrana
[ハード・ウェイのPythonを学ぶ、例49:assert \ _equalを使ってオブジェクトを比較する]の可能な複製(https://stackoverflow.com/questions/9306242/learn-python-the-hard-way-ex-49-comparing- objects-using-assert-equal) – quamrana
ありがとう、@quamrana。問題は、__eq__メソッドの場所でした。私はそれが 'WineFields'クラスにあるべきであると理解していませんでした。 'Map'クラスではありません。 – Thomas