这是我遇到的第一个问题。我有一个类和相应的单元测试。测试随机通过/失败,被测类没有任何变化。我的意思是我按shift+F10,然后立即再按一次。一个通过,另一个失败。你知道吗
这是班级(虽然看起来有点脏)。(原谅我)
class XmlSerializer:
def __init__(self, int_repr = 'int', str_repr = 'str'):
"""@int_repr: integer type representation (default: 'int')
@str_repr : string type representation (default: 'str')"""
self.xml_result = []
self.__int_repr = int_repr
self.__str_repr = str_repr
def serialize(self, element):
self.xml_result = []
self.__recurse2(element, indent='')
return ''.join(self.xml_result)
def __recurse2(self, element, indent):
if isinstance(element, int):
self.xml_result += indent + '\t<' + self.__int_repr + '>' + str(element) + '</' + self.__int_repr + '>\n'
if isinstance(element, str):
self.xml_result += indent + '\t<' + self.__str_repr + '>' + str(element) + '</' + self.__str_repr + '>\n'
elif type(element) in [type(list()), type(tuple()), type(dict())]:
for el in element:
self.__recurse2(el, indent + '\t')
else:
try: # Attribute names are printed only here
attrs = vars(element)
self.xml_result += indent + '<' + element.__class__.__name__ + '>\n'
for attr in attrs:
self.xml_result += indent + '\t' + '<'+ attr +'>\n'
self.__recurse2(attrs[attr], indent + '\t')
self.xml_result += indent + '\t' + '</'+ attr +'>\n'
self.xml_result += indent + '</' + element.__class__.__name__ + '>\n'
except Exception as ex:
pass
下面是测试类(文件的全部内容)
import unittest
from string_and_regex.xml_stuff import XmlSerializer
class Person:
def __init__(self):
self.name = "Sam"
self.age = 26
class Group:
def __init__(self):
self.name = 'sample object'
self.people = [Person(), Person()]
group_serialized = '<Group>\n' \
'\t<name>\n' \
'\t\t<str>sample object</str>\n' \
'\t</name>\n' \
'\t<people>\n' \
'\t\t<Person>\n' \
'\t\t\t<name>\n' \
'\t\t\t\t<str>Sam</str>\n' \
'\t\t\t</name>\n' \
'\t\t\t<age>\n' \
'\t\t\t\t<int>26</int>\n' \
'\t\t\t</age>\n' \
'\t\t</Person>\n' \
'\t\t<Person>\n' \
'\t\t\t<name>\n' \
'\t\t\t\t<str>Sam</str>\n' \
'\t\t\t</name>\n' \
'\t\t\t<age>\n' \
'\t\t\t\t<int>26</int>\n' \
'\t\t\t</age>\n' \
'\t\t</Person>\n' \
'\t</people>\n' \
"</Group>\n"
class TestXmlSerializer(unittest.TestCase):
def test_serialize(self):
serializer = XmlSerializer()
xml_result = serializer.serialize(Group())
self.assertEquals(group_serialized, xml_result)
if __name__ == '__main__':
unittest.main()
(也请原谅我提出的测试用例,我知道)
dict没有可预测的迭代顺序。当您在
vars(element)
上迭代时:测试的每次运行都将以自己的任意顺序进行迭代。根据解释器实现和设置的具体情况,这可能是相当一致的,或者是随机的,也可能是以几乎任何方式表现的。您可能使用的是python3,其中字符串哈希代码是随机的。你知道吗
不要依赖于dict迭代顺序。你知道吗
相关问题 更多 >
编程相关推荐