在python中,如何从文件中加载数据(用于单元测试)?
我已经编写了一个专门的HTML解析器,我想用我下载的两个示例网页对其进行单元测试 在Java中,我使用类资源将数据加载到单元测试中,而不必依赖它们位于文件系统上的特定路径。在Python中有没有实现这一点的方法 我找到了这个函数,但它似乎是特定于doctest的。我只想获得一个特定HTML文件的文件句柄,它与当前模块相关在python中,如何从文件中加载数据(用于单元测试)?,python,unit-testing,file-io,Python,Unit Testing,File Io,我已经编写了一个专门的HTML解析器,我想用我下载的两个示例网页对其进行单元测试 在Java中,我使用类资源将数据加载到单元测试中,而不必依赖它们位于文件系统上的特定路径。在Python中有没有实现这一点的方法 我找到了这个函数,但它似乎是特定于doctest的。我只想获得一个特定HTML文件的文件句柄,它与当前模块相关 提前感谢您的建议 我想你的任务可以归结为获取当前文件的任务。然后将该路径扩展到HTML文件及其所在的路径。您也可以使用StringIO或cStringIO将包含文件内容的字符串
提前感谢您的建议 我想你的任务可以归结为获取当前文件的任务。然后将该路径扩展到HTML文件及其所在的路径。您也可以使用StringIO或cStringIO将包含文件内容的字符串模拟为文件。要从unittest中的文件加载数据,如果testdata与unittests位于同一目录,则有一种解决方案:
TESTDATA_FILENAME = os.path.join(os.path.dirname(__file__), 'testdata.html')
class MyTest(unittest.TestCase)
def setUp(self):
self.testdata = open(TESTDATA_FILENAME).read()
def test_something(self):
....
这是基于Ferran的回答,但它会在
MyTest.tearDown()过程中关闭文件,以避免“ResourceWarning:未关闭的文件”:
TESTDATA_FILENAME = os.path.join(os.path.dirname(__file__), 'testdata.html')
class MyTest(unittest.TestCase)
def setUp(self):
self.testfile = open(TESTDATA_FILENAME)
self.testdata = self.testfile.read()
def tearDown(self):
self.testfile.close()
def test_something(self):
....
是的,我想到了这一点,但这需要我将所有HTML作为字符串放入python文件中,我不喜欢它,因为它的长度大于3k。为了便于查看,最好用您的添加内容编辑Ferran的答案。使用“new”python,此命令变为:TEST\u file=pathlib.Path(\uu file\uuu).parent.joinpath(“testdata.HTML”)
然后测试文件.open()
。记住导入pathlib
,请注意@LeilaHC回答中的建议,即再次正确关闭测试文件,例如在拆卸方法中。是setuptools
附带的工具。如果安装了一个软件包,即使只安装了pip install-e
或/setup.py develope
,那么pkg\u资源
只需知道\uu名称
就可以找到资源文件。