【发布时间】:2020-03-06 15:54:51
【问题描述】:
我正在尝试使用解析 XML 的不同元素的某些方法编写一些单元测试。但我在单元测试中解析“测试”xml 文件时遇到了一些问题。
我的问题与 XML/XSD 文件无关,而只是关于如何在我的单元测试中正确解析它们。
这是我目前的代码:
import unittest
from lxml import etree
from Directory.method_in_class import ClassName #changed the names for security
class TestXmlData(unittest.TestCase):
def setUp(self):
self.method_in_class = ClassName()
XSDDoc = etree.parse("dir/testxsd.xsd")
rootXSD = XSDDoc.getroot()
def test_whatever(self):
# Test whatever
if __name__ == '__main__':
unittest.main()
即使我在实现方法中以相同的方式解析,我也会收到以下错误:
OSError: 读取文件 'dir/testxsd.xsd' 时出错: 加载失败 外部实体“dir/testxsd.xsd”
我尝试了其他几种方法,例如从 this answer 加载文件,但这样做会出错:
import unittest
from lxml import etree
import os
THIS_DIR = os.path.dirname(os.path.abspath(__file__))
class TestSpecData(unittest.TestCase):
def setUp(self):
my_data_path = os.path.join(THIS_DIR, os.pardir, 'dir/testxsd.xsd')
rootXSD = my_data_path.getroot()
def test_whatever(self):
data = sum(1, 2)
self.assertEqual(data, 3)
if __name__ == '__main__':
unittest.main()
AttributeError: 'str' 对象没有属性 'getroot'
我也尝试过this answer,但我对 Django 不熟悉,所以遇到了一堆错误。
【问题讨论】:
-
“我尝试了其他几种替代方法,例如从这个答案加载文件,但这样做会给我一个错误:” - 请显示此替代方法的代码。我认为您最初错误的原因是单元测试可以从不同的目录执行,因此路径应该是绝对的。您解析此 XSD 文件的方式很好。
-
我以为我是在单元测试中给出 xsd 的绝对路径?我要解析的文件来自“dir”目录。
-
请显示使用 XSD 文件绝对路径的代码。谢谢。 (只有以
/开头的路径才是绝对路径。) -
抱歉。我以为您的意思是当前目录的绝对路径。那不行吗?
-
我只能重复我自己。请显示使用 XSD 文件的绝对路径的代码。 (您说您尝试了this answer 中产生不同错误的方法。)
标签: python xml xsd lxml python-unittest