尝试使用py.test从两个字典断言返回值时出现AssertionError

时间:2017-07-25 15:19:54

标签: python unit-testing dictionary assert

我正在测试我正在学习Python的基于文本的游戏。最近几天我一直忙着为我遇到的问题寻找解决方案。我尝试了多种测试方法,但最终都给了我同样的错误。

问题是以下AssertionError(使用py.test):

 E       AssertionError: assert <Textgame.Waffle.WineFields object at 0x03BDECD0> == 
 <Textgame.Waffle.WineFields object at 0x03BD00D0>

显然,对象(Textgame.Waffle.WineFields)是正确的,但位置不同。我不在乎这个位置。我认为这是因为我使用了两个具有相同内容的单独词典。但是,如果可能的话,我宁愿继续使用这本词典。

测试的最小工作示例如下:

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类中,但要么我做错了,要么根本不应该用它来解决这个问题。我从另一个StackOverflow页面得到了关于大致相同问题的想法:

Learn Python the Hard Way, Ex 49 : Comparing objects using assert_equal

有人可以向我解释如何断言我得到的输出是我所期望的,而不用担心位置是否相同?

1 个答案:

答案 0 :(得分: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

由于成员x相等,两个不同的实例将相互等同。

事实上,我刚刚在你reference

的问题中复制了接受的答案。