Python Начальный каталог модульного теста не импортируется - PullRequest
0 голосов
/ 14 июля 2020

Я столкнулся с этой ошибкой и попробовал несколько исправлений, опубликованных на этом сайте, но мне не повезло. Я написал модульный тест и не могу его вызвать из-за ошибки Start Directory Not Importable. Моя файловая структура:

Root
    └── tests
        └── fixtures
            └── customFile.json
        ├── __init__.py
        └── functionTest.py
    └── Lambdas
        └── FunctionA
            ├── __init__.py
            └── FunctionToTest.py

, а мой модульный тест выглядит так:

import unittest
import json
import boto3

from Lambdas.FunctionA import FunctionToTest

s3 = boto3.client('s3', 'us-east-1')
file = s3.get_object(Bucket="BUCKET", Key="KEY")

mapper = s3.get_object(Key="KEY", Bucket="BUCKET")
mapperJSON = json.loads(mapper['Body'].read().decode('utf-8'))

path = r"./tests/fixtures/customFile.json"
with open(path) as file:
    endList = json.load(file)
    file.close()

class TestMatchModeler(unittest.TestCase):
    def test_run(self):
        test = FunctionToTest(file, mapperJSON)
        self.assertEqual(len(test), len(endList))


if __name__ == '__main__':
    unittest.main()

, а фактический код, который он тестирует:

def FunctionToTest(file, mapperjson):
    Fields = mapperjson['mappings']

    lines1 = file['Body'].read().decode('utf-8').split('\n')
    fieldnames = lines1[0].replace('"','').split(',')
    testls = [row for row in csv.DictReader(lines1[1:], fieldnames)]
    out = json.dumps(testls)
    jlist1 = json.loads(out)

    dicts = []
    Fieldsinv = {v: k for k, v in Fields.items()}
    for i in jlist1:
        d = {}
        for k, v in i.items():
            if k in Fieldsinv:
                d[Fieldsinv[k]] = v
        d['individual_id'] = str(uuid.uuid4())
        dicts.append(d)
    return dicts

По сути, customFile.json - это список словарей, которые, как я знаю, верны, и я хочу проверить, правильно ли мой код изменяет CSV, чтобы иметь такое же количество dicts. Этот вопрос задавали много, и ответ всегда заключается в том, чтобы файлы были связаны через файл init.py, но, как вы можете видеть, я сделал это, и он все еще не работает.

Я конечно, это может быть помечено как дубликат, но я не уверен, что еще попробовать.

Ответы [ 2 ]

0 голосов
/ 15 июля 2020

оказывается, запуск этой команды

python -m tests.functionTest

добился цели

0 голосов
/ 14 июля 2020

Похоже, вам не хватает файлов __init__.py в некоторых каталогах: root, tests и lambdas.

См. Здесь: python - unittest - ImportError: Начальный каталог не импортируемый

...