Невозможно использовать каталоги, сгенерированные библиотекой tempfile в модуле тестирования кода Python. - PullRequest
0 голосов
/ 16 мая 2019

Я тестирую мой код на Python, использую библиотеку tempfile для создания временного каталога с именем temp_dir и сохраняю сгенерированный выходной файл в моем temp_dir, затем я хочу сравнить этот вывод с уже существующим правильным выходным файлом.

У меня есть свой класс, в его методе установки я создаю temp_dir и удаляю его методом разрыва следующим образом:

class PrimaryTest(unittest.TestCase):

  def setUp(self):
    self.temp_dir = tempfile.mkdtemp()

  def tearDown(self):
    shutil.rmtree(self.temp_dir)

Теперь этот временный каталог, который я хочу использовать в своей тестовой функции, чтобы сохранить файл, сгенерированный функциями в моем двоичном файле, который я тестирую ..

Вот как я использую приведенный выше код:

  def CatalogCmp(self, product_name, actual_file, expected_file):
    doom.getCatalog(self.temp_dir, product_name)
    actual = json.load(open(actual_file))
    expected = json.load(open(expected_file))
    self.assertEqual(actual, expected)

  def testCatalogImage(self):
    expected_path = os.path.join(‘path/testdata/doom’, ’product1.json')
    actual_path = os.path.join(self.temp_dir, ’product1.json')
    self.CatalogCmp(‘product1’, actual_path, expected_path)

Я получаю следующую ошибку:

IOError: [Errno 2] No such file or directory: '/tmp/tmpGmv_ZR/product1.json'

Следующая строка генерирует эту ошибку:

actual = json.load(open(actual_file))

1 Ответ

0 голосов
/ 17 мая 2019

Я получил несколько подсказок, которые помогли мне решить проблему:

  1. На самом деле, я создаю временный каталог дважды, вызывая self.temp_dir в функции CatalogCmp и перед вызовом в самой тестовой функции, во время создания переменной actual_path, это создает две разные директории для обоих вызовов, хотя это не может быть прямой причиной данной ошибки, но это не так. Поэтому теперь я создаю временный каталог только один раз в своей тестовой функции, сохраняю переменную и передаю ее в другие места.

  2. Еще одна вещь, которая была ошибочной, заключалась в том, что функция, которую я тестирую, на самом деле принимает переменную списка, а не только название продукта. Так что, возможно, тестируемая функция даже не генерировала никакого вывода. Извините, я думаю, что кто-то здесь определенно помог бы, но я не могу поместить весь код здесь. Поэтому, когда я попытался вызвать свою функцию следующим образом: doom.GetCatalog (selftemp_dir, [product_name]). Это работает сейчас. но мне интересно, почему ошибка не была уместна, чтобы поймать эту ошибку. Как бы я проверил, была ли функция даже вызвана правильно или нет.

...