Как загрузить данные из файла, для модульного теста, в Python? - PullRequest
32 голосов
/ 08 ноября 2011

Я написал специализированный HTML-парсер, который хочу выполнить модульное тестирование с парой загруженных образцов веб-страниц.

В Java я использовал ресурсы класса для загрузки данных в модультесты, не полагаясь на то, что они находятся по определенному пути в файловой системе.Есть ли способ сделать это в Python?

Я нашел функцию doctest.testfile () , но, похоже, она специфична для doctests.Я хотел бы просто получить дескриптор файла для конкретного HTML-файла, относящегося к текущему модулю.

Заранее благодарен за любые предложения!

Ответы [ 4 ]

49 голосов
/ 08 ноября 2011

Для загрузки данных из файла в юнит-тесте, если данные теста находятся в том же каталоге, что и юнит-тесты, одно решение:

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):
       ....
2 голосов
/ 30 января 2019

Это основано на ответе Феррана, но оно закрывает файл во время 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):
       ....
1 голос
/ 08 ноября 2011

Вы также можете использовать StringIO или cStringIO для имитации строки, содержащей содержимое вашего файла в виде файла.

1 голос
/ 08 ноября 2011

Я полагаю, ваша задача сводится к тому, что дано здесь , чтобы получить текущий файл. Затем продлите этот путь по пути к вашему HTML-файлу и откройте it.

...