如何在Python中为单元测试从文件加载数据?

56 投票
4 回答
48596 浏览
提问于 2025-04-17 05:51

我写了一个专门的HTML解析器,现在想用我下载的一些网页来进行单元测试。

在Java中,我使用类资源来加载数据到单元测试中,这样就不需要依赖文件系统中特定的路径。那么在Python中有没有类似的方法呢?

我找到了一些关于doctest.testfile()的内容,但这似乎只适用于doctest。我想要的是获取一个特定HTML文件的文件句柄,这个文件是相对于当前模块的。

提前感谢任何建议!

4 个回答

2

你还可以使用 StringIO 或 cStringIO 来模拟一个字符串,就像这个字符串是你文件内容的一个文件一样。

24

这段内容是基于Ferran的回答,但它在MyTest.tearDown()这个步骤中关闭了文件,以避免出现'资源警告:文件未关闭'的问题:

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):
       ....
88

如果你想在单元测试中从文件加载数据,并且测试数据和单元测试文件在同一个目录下,有一个解决办法:

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):
       ....

撰写回答