Невозможно запустить код внутри python модульного теста - PullRequest
0 голосов
/ 31 января 2020

У меня проблема при попытке написать модульные тесты для скрипта python3. Код генерирует ошибку AttributeError во время работы внутри определения теста, но этого не происходит, если я запускаю тот же код в том же файле вне класса определений теста.

Код:

class TestDataCleaningMethods(unittest.TestCase):
    def test_one(self):
        data = pd.DataFrame(columns=[
            'categoryId',
            'regionId',
            'districtId',
            'jobType',
            'contractType',
            'payType'])
        result = service.__columns_to_snake_case(data)

Выдает следующую ошибку:

AttributeError: module 'service' has no attribute '_TestDataCleaningMethods__columns_to_snake_case'

Я провел поиск и нашел несколько вопросов и ответов об ошибках атрибутов на unittest, но не нашел ни одного, который бы полностью соответствовал этой проблеме.


Еще одна вещь, на которую стоит обратить внимание: я исправил Monkey import, чтобы вернуть Mocks, но я не вижу, чтобы это мешало работе unittest. В интересах завершенности, этот код:

orig_import = __import__

original_imports = [
    "service",
    "pandas"
]

def import_mock(name, *args):
    if name in original_imports:
        print(f"Using original imports for {name}")
        return orig_import(name, *args)
    print(f"Mocking {name}")
    return mock.MagicMock()


with mock.patch('builtins.__import__', side_effect=import_mock):
    import service

Любая помощь с благодарностью

1 Ответ

0 голосов
/ 31 января 2020

Решено, оказывается, это проблема с двойным подчеркиванием в именах функций. Двойное подчеркивание заставляет интерпретатор python переименовывать атрибут для предотвращения конфликтов. Изменение имен функций для удаления двойного подчеркивания решает проблему.

...