我一直在尝试在最新项目中使用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
。 / p>
有什么办法可以解决这个问题吗?
答案 0 :(得分:1)
从__init__.py
目录中删除tests
,并将其余代码保持原样。实际上不建议在其中放置一个:https://stackoverflow.com/a/30167059/769971
在本地尝试使用它可以解决我的问题。
编辑:我还应该提到,像链接的答案一样,您必须修改python路径以包含要测试的模块。或使用类似nose
之类的东西为您解决所有问题。
答案 1 :(得分:0)
另一种方法是保持导入和包的状态不变,但是只需在运行测试之前设置PYTHONPATH
。
PYTHONPATH=$PYTHONPATH:src python -m unittest discover