这是我的见解:
首先,我将“打开文件”逻辑与实际转换步骤分开。
然后,基本上您需要确保您的函数转换合法且正确的 xml,并在 xml 无效或损坏时抛出异常。
这是您应该拥有的简单示例:
import json
import unittest
import xmltodict
def to_json(xml_):
dict_ = xmltodict.parse(xml_)
json_ = json.dumps(dict_)
return json_
class TestToJson(unittest.TestCase):
def test_good_xml(self):
xml = """<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
</book>
</catalog>"""
self.assertEquals(json.loads(to_json(xml)), {"catalog": {
"book": [{"@id": "bk101", "author": "Gambardella, Matthew", "title": "XML Developer\'s Guide"},
{"@id": "bk102", "author": "Ralls, Kim", "title": "Midnight Rain"}]}})
def test_bad_xml(self):
xml = "<broken><broken"
self.assertRaises(Exception, to_json, xml)
if __name__ == "__main__":
unittest.main()
至于你应该测试不同的有效和无效的 xml 字符串,你可以使用一个很棒的ddt包,它会为不同的输入自动增加你的测试方法。
此外,您可能希望在 xmltodict 返回无效 dict 对象的实际情况中测试一些无法实现的情况。在这种情况下,您需要模拟 xmltodict.parse
函数并将其更改为return_value
.
谈到TDD。你的代码已经写好了。TDD 使用不同的方法,您首先编写测试,然后尝试通过编写实际代码使它们通过。您绝对应该尝试一下 - 它有很多好处。
一些资源: