我一直在尝试在我的最新项目中使用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
(不使用unittest)不再是因为它找不到script2
。
知道如何解决这个问题吗?
从__init__.py
目录中删除tests
,并保留其余代码。在那里有一个人实际上气馁:https://stackoverflow.com/a/30167059/769971
在本地试用它可以解决这个问题。
编辑:我还应该提一下,就像链接的答案一样,你必须修改你的python路径以包含你正在测试的模块。那,或者使用像nose
这样的东西来为你解决这个问题。
另一种方法是按原样保留导入和包,但只需在运行测试之前设置PYTHONPATH
。
PYTHONPATH=$PYTHONPATH:src python -m unittest discover