Как издеваться над os.sep для os.path.join

У меня есть тест для функции, которая находит файлы и возвращает список путей. Это выглядит примерно так:

def find(self):
    files = sorted(os.listdir(self.path))

    for filename in files:
        full_path = os.path.join(self.path, filename)
        yield full_path

где self.path либо использует прямую косую черту в Linux или обратную косую черту в Windows.

Я хочу проверить, использует ли функция правильный каталог + файл при присоединении к ним. Итак, мой тест выглядит так:

def test_find(self):
    test_list = ['users.csv', 'products.csv']

    with patch('os.listdir', return_value=test_list),\
         patch('platform.system', return_value='Windows'),\
         patch('os.path.exists', return_value=True):
        with patch('os.sep', new_callable=PropertyMock, return_value='\\') as mock:
            finder = ImportFinder()
            found_files = list(finder.find())

            self.assertEqual(['C:\\test\\import\\products.csv', 'C:\\test\\import\\users.csv'], found_files)

но os.path.join все еще использует / так как я запускаю тест на машине с Linux. found_files тогда выглядит ['C:\\test\\import/products.csv', 'C:\\test\\import/users.csv']

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

Но мой вопрос: почему это не работает так, как я хотел?

0 ответов

Другие вопросы по тегам