Я столкнулся с этой ошибкой и попробовал несколько исправлений, опубликованных на этом сайте, но мне не повезло. Я написал модульный тест и не могу его вызвать из-за ошибки 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
, но, как вы можете видеть, я сделал это, и он все еще не работает.
Я конечно, это может быть помечено как дубликат, но я не уверен, что еще попробовать.