最简单的解释方法:
import unittest
from element import Element
class TestHTMLGen(unittest.TestCase):
def test_Element(self):
page = Element("html", el_id=False)
self.assertEqual(page, Element("html", el_id=False)) # this is where I need help
我收到以下错误:
AssertionError: <element.Element object at 0x025C1B70> != <element.Element object at 0x025C1CB0>
我知道对象不完全相同但是有没有办法检查它们是否相等?我认为assertEqual会起作用。
编辑:我正在使用addTypeEqualityFunc。但是,我仍然遇到麻烦
def test_Element(self):
page = Element("html", el_id=False)
self.addTypeEqualityFunc(Element, self.are_elements_equal)
self.assertEqual(page, Element("html", el_id=False))
def are_elements_equal(self, first_element, second_element, msg=None):
print first_element.attribute == second_element.attribute
return type(first_element) is type(second_element) and first_element.tag == second_element.tag and first_element.attribute == second_element.attribute
这是我得到的输出:
假
它说测试通过了。它不应该传递,因为first_element.attribute不等于second_element.attribute。此外,即使我return false
只有are_elements_equal
,测试仍会通过。
答案 0 :(得分:1)
解决方案:
self.assertEqual(vars(page), vars(Element("html", el_id=False)))
然而,很多次def are_elements_equal(self, first_element, second_element, msg=None):
self.assertEqual(type(first_element), type(second_element))
try:
type(vars(first_element)) is dict
except:
self.assertEqual(first_element, second_element)
else:
for i in vars(first_element).keys():
try:
type(vars(vars(first_element)[i])) is dict
except:
if type(vars(first_element)[i]) is list:
for j in range(len(vars(first_element)[i])):
self.are_elements_equal(vars(first_element)[i][j], vars(second_element)[i][j])
else:
self.assertEqual(vars(first_element)[i], vars(second_element)[i])
else:
self.are_elements_equal(vars(first_element)[i], vars(second_element)[i])
都会做到这一点
编辑:另外,我应该补充一下。我做了一个很酷的小函数,可以检查对象是否相等。应该适用于大多数情况。
{{1}}
答案 1 :(得分:0)
使用vars():
为模块,类,实例或具有 dict 属性的任何其他对象返回 dict 属性。
self.assertEqual(vars(page), vars(Element("html", el_id=False)))