如何在python中加载文件中的数据,进行单元测试?

时间:2011-11-08 08:34:28

标签: python unit-testing file-io

我写了一个专门的HTML解析器,我想用我下载的几个示例网页进行单元测试。

在Java中,我使用了类资源,将数据加载到单元测试中,而不必依赖它们在文件系统的特定路径上。有没有办法在Python中执行此操作?

我找到了doctest.testfile()函数,但这似乎是doctests特有的。我想获得一个文件句柄,一个特定的HTML文件,它与当前模块有关。

提前感谢任何建议!

4 个答案:

答案 0 :(得分:47)

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

答案 1 :(得分:1)

我猜你的任务归结为给出here获取当前文件的内容。然后通过HTML文件的路径扩展该路径,并open

答案 2 :(得分:1)

您还可以使用StringIO或cStringIO来模拟包含文件内容的字符串作为文件。

答案 3 :(得分:1)

这是基于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):
       ....