在python unittest中导入问题



我是python的新手,并试图使unittest工作,但测试文件中的导入不起作用。文件夹结构:

toyProjects
└── pythonProj
├── mainpack
│   ├── __init__.py         
│   ├── MyClass.py  
│   └── setup.py
└── tests
├── __init__.py        
└── test_MyClass.py

MyClass.py:

class MyClass:
def __init__(self, x):
self.x = x
def someMethod(self):
print("Called MyClass.someMethod");

py:

def myFunction():
print("Called setup.myFunction");

test_MyClass.py:

import unittest
import setup
from MyClass import MyClass
class TestMyClass(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.my = MyClass(4);
def test_something(self):
self.my.someMethod();
setup.myFunction();    

如果它很重要:在pythonProj中有一个mainfile.py(没有在上面的图中显示,因为我认为它不相关),它运行良好并找到所有文件。其内容为:

from mainpack import setup
from mainpack.MyClass import MyClass
print("Program start");
setup.myFunction()
myInst = MyClass(4);
myInst.someMethod();

我用

运行测试
cd toyProjectspythonProjtests
python -m unittest test_MyClass.py

我从这里尝试了几乎所有的解决方案。这个页面说:"网上的许多资源会让你摆弄你的系统。"但在大多数情况下,这是一种代码气味,表明您没有正确使用模块和/或包,所以希望我能学会正确的方法(但我将使用sys. path)。路径,如果没有其他解的话。只是到目前为止,我尝试过的所有版本也都不起作用。

更具体地说,我在test_MyClass文件中尝试了不同类型的导入:
import setup                               -->ModuleNotFoundError: No module named 'setup'
from MyClass import MyClass                -->ModuleNotFoundError: No module named 'MyClass'
from mainpack import setup                 -->ModuleNotFoundError: No module named 'mainpack'
from ..mainpack import setup               -->Unresolved reference mainpack
import mainpack                            -->ModuleNotFoundError: No module named 'mainpack'
from mainpack.setup import someFunction    -->Unresolved reference mainpack
from .. import mainpack                    -->ImportError: attempted relative import with no known parent package

对于可导入的包,它必须位于PATH环境变量指定的目录之一中。由于PATH中没有pythonProj目录,因此可以从该目录运行脚本,因为python在运行脚本时会自动将当前工作目录添加到PATH

由于PATH无法访问setupMyClass模块,因此不能使用隐式相对导入导入它们。相反,您可以在test_MyClass.py中使用绝对导入:
import setup->from mainpack import setup
from MyClass import MyClass->from mainpack.MyClass import MyClass

然后你可以运行你的测试:

cd toyProjects/pythonProj
python -m unittest tests/test_MyClass.py

最新更新