Google App Engine Unittest: трудности с AssertEquals - PullRequest
1 голос
/ 19 июня 2010

У меня есть тестовый модуль для моего приложения GAE:

def test_getNeighborhoodKeys_twoCourses(self):
            cs1110, cs2110 = testutils.setUpSimpleCourses()

            foo = getFooResult()
            bar = getBarResult()

    self.assertEquals(foo, bar) # fails

Это ошибка:

AssertionError: set([CS 1110: Untitled, CS 2110: Untitled]) != set([CS 2110: Untitled, CS 1110: Untitled])

Мне кажется, что испытание должно пройти. Что не так?

1 Ответ

5 голосов
/ 19 июня 2010

Похоже, что элементы, принадлежащие наборам foo и bar, имеют какой-то необычный тип, который переопределяет __repr__ - в противном случае, с обычными типами, будут кавычки, чтобы уточнить, что именно находится внутри этих скобок. Таким образом, этот тип также должен переопределить __eq__ для определения условий равенства (в противном случае по умолчанию два экземпляра равны, только если они один и тот же экземпляр). В качестве альтернативы вы могли бы переопределить __cmp__, но это довольно старый и запыленный подход - в настоящее время гораздо предпочтительнее конкретные сравнения, такие как __eq__!

Если вы переопределите __eq__ (или __cmp__ в этом отношении), обязательно переопределите также __hash__, потому что крайне важно, чтобы два экземпляра, которые сравнивают равные, тоже имели абсолютно одинаковый хэш, в противном случае использование таких экземпляров в качестве членов наборов, или ключей в словарях, плохо себя ведет в очень трудно предсказуемых путях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...