How to load data from a file, for a unit test, in python?

Question:

I’ve written a specialized HTML parser, that I want to unit test with a couple of sample webpages I’ve downloaded.

In Java, I’ve used class resources, to load data into unit tests, without having to rely on them being at a particular path on the file system. Is there a way to do this in Python?

I found the doctest.testfile() function, but that appears to be specific to doctests. I’d like to just get a file handle, to a particular HTML file, which is relative to the current module.

Thanks in advance for any suggestions!

Asked By: cberner

||

Answers:

I guess your task boils down to what’s given here to get the current file. Then extend that path by the path to you HTML file and open it.

Answered By: Johannes Charra

You can also use a StringIO or cStringIO to simulate a string containing your file’s contents as a file.

Answered By: Christian Alis

To load data from a file in a unittest, if the testdata is on the same dir as unittests, one solution :

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):
       ....
Answered By: Ferran

This is based on Ferran’s answer, but it closes the file during MyTest.tearDown() to avoid ‘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):
       ....
Answered By: Leila Hadj-Chikh
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.