gpt4 book ai didi

python - 如何测试这段代码

转载 作者:行者123 更新时间:2023-11-28 18:48:49 26 4
gpt4 key购买 nike

我正在尝试 TDD 和单元测试,但从未真正认真地做过这两者。

我有一个程序输出的 XML 文件。我想将其转换为 JSON。我找到了 xmltodict所以我想做的是:

def to_json(filename):
with open(filename) as f:
xml_ = f.read()
dict_ = xmltodict.parse(xml_)
json_ = json.dumps(dict_)
return json_

我将如何测试它?我应该把它分成 3 个函数并分别测试吗?我应该针对错误的文件名进行“防御性”编码吗? parse 和 dumps 方法抛出的错误怎么办?

最后,有没有好的引用资料/书籍/博客文章讨论这类事情?我知道我应该进行单元测试并且非常喜欢 TDD 的想法,但实际上我不知道自己在做什么。

最佳答案

这是我的见解:

首先,我会将“打开文件”逻辑与实际转换步骤分开。

然后,基本上您需要确保您的函数转换合法且正确的 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 会返回无效的字典对象。在这种情况下,您需要 mock xmltodict.parse 函数并更改它的 return_value

谈论 TDD。你的代码已经写好了。 TDD 使用不同的方法,首先编写测试,然后尝试通过编写实际代码使它们通过。您绝对应该尝试一下 - 它有很多好处。

一些资源:

关于python - 如何测试这段代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16247746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com