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

cbe*_*ner 33 python file-io unit-testing

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

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

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

在此先感谢您的任何建议!

Fer*_*ran 54

要从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):
       ....
Run Code Online (Sandbox Code Playgroud)

  • 使用“新”python [pathlib](https://docs.python.org/3.8/library/pathlib.html#module-pathlib),此命令变为: `TEST_FILE = pathlib.Path(__file__).parent.joinpath( “testdata.html”)`,然后是`TEST_FILE.open()`。请记住“导入pathlib”,并请注意@LeilaHC答案中的建议,以再次正确关闭测试文件,例如在tearDown方法中。 (2认同)

Lei*_*aHC 11

这是基于 Ferran 的回答,但它会在此期间关闭文件MyTest.tearDown()以避免“ResourceWarning: unclosed file”:

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):
       ....
Run Code Online (Sandbox Code Playgroud)

  • 为了可见性,最好通过添加来编辑费兰的答案。 (5认同)