попытка относительного импорта за пределы пакета верхнего уровня при попытке запустить модульное тестирование - PullRequest
0 голосов
/ 01 декабря 2018

Это структура папок моего проекта на python:

src->
    stock_alerter->
                 tests

Внутри папок stock_alerter и тестов У меня есть пустой __init__.py

Внутри stock_alerter У меня есть файл stock.pyсодержащий:

class Stock:
    def __init__(self, symbol):
        self.symbol = symbol
        self.price = None

Внутренние тесты У меня есть файл test_stock.py, содержащий:

import unittest
from ..stock import Stock

class StockTest(unittest.TestCase):

    def test_price_of_a_new_stock_class_should_be_None(self):
        stock = Stock("GOOG")
        self.assertIsNone(stock.price)

Когда я запускаю test_stock.py, я получаю:

ValueError('attempted relative import beyond top-level package')

Iсделал некоторые поиски, но изменив

from ..stock import Stock

на:

stock import Stock

дает:

ModuleNotFoundError("No module named 'stock'")

Есть идеи?Кстати, я использую Visual Studio Express 2017 и запустил test_stock.py.

PS:

Добавление:

import os,sys,inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
sys.path.insert(0,parentdir) 

к работам test_stock.py.Теперь я думал, что Python это просто.Какой кошмар ...

1 Ответ

0 голосов
/ 01 декабря 2018

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

, но есть и другой способ взлома, если посмотреть по этой ссылке: Импорт пакетов одного уровня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...