ошибка unittest при импорте из другого каталога - PullRequest
0 голосов
/ 30 августа 2018

Я пытался использовать unittest в своем последнем проекте, но у меня есть некоторые трудности с импортом.

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

Моя папка имеет структуру:

Project
 |
 +-- src
 |   |
 |   +-- __init__.py
 |   +-- script1.py
 |   +-- script2.py
 |
 +-- test
  |  |
  |  +-- __init__.py
  |  +-- test_script1.py

script1.py содержит:

#!/usr/bin/env python3.6
# -*- encoding: utf-8 -*-
"""
    This is the script I want to run tests on
"""
import networkx as nx  # works just fine
from script2 import blablabla  # does not work when called from unittest

и вот как выглядит мой test_script1.py:

#!/usr/bin/env python3.6
# -*- encoding: utf-8 -*-

import unittest
import networkx as nx
import src.script1

Когда я пытаюсь запустить тесты с помощью этой команды ~/Project$ python -m unittest discover, я получаю ModuleNotFoundError: No module named 'script2'.

Если я изменю script1.py на from .script2 import blablabla, то юнит-тесты будут работать нормально, но только script1.py (без использования юнит-теста) больше не будет, так как он не может найти script2.

Есть идеи, как мне это решить?

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Альтернативой является сохранение импорта и пакетов такими, какие они есть, но просто установите PYTHONPATH перед запуском теста.

PYTHONPATH=$PYTHONPATH:src python -m unittest discover
0 голосов
/ 30 августа 2018

Удалите __init__.py из каталога tests и оставьте остальной код без изменений. Наличие одного там на самом деле не рекомендуется: https://stackoverflow.com/a/30167059/769971

Попробуй это локально, это исправит это для меня.

РЕДАКТИРОВАТЬ: Я должен также упомянуть, что, как и связанный ответ, вам придется изменить путь к Python, чтобы включить модуль, который вы тестируете. Это, или используйте что-то вроде nose, что вам все это поможет.

...