2017-07-25 6 views
0

私は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のページからこのアイデアを得ました同じです?

+1

質問に受け入れ答えを複製しました。他の問題と同じ値を持つ属性を追加し、 'WineFields'クラスに' __eq__'メソッドを追加する必要があります。 – quamrana

+0

[ハード・ウェイのPythonを学ぶ、例49:assert \ _equalを使ってオブジェクトを比較する]の可能な複製(https://stackoverflow.com/questions/9306242/learn-python-the-hard-way-ex-49-comparing- objects-using-assert-equal) – quamrana

+0

ありがとう、@quamrana。問題は、__eq__メソッドの場所でした。私はそれが 'WineFields'クラスにあるべきであると理解していませんでした。 'Map'クラスではありません。 – Thomas

答えて

0

あなたは、各インスタンスを識別できるようにする必要があります。

class X: 

    def __init__(self, x): 
     self.x = x 

    def __eq__(self, other): 
     return self.x == other.x 

これは、それらを構築することは、パラメータを必要とすることを意味します:

one = X(1) 
other = X(1) 
one == other 

2つの異なるインスタンスが起因して相互に同一視しますメンバxが等しい。

は、実際には、私はちょうどあなたが `WineFields`の2つの異なるインスタンスを使用しているように見えるし、それらが同じであることを期待していますがreference

関連する問題