从其他目录导入时出现unittest错误

时间:2018-08-30 14:36:56

标签: python python-3.x python-import python-unittest

我一直在尝试在最新项目中使用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>

有什么办法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

__init__.py目录中删除tests,并将其余代码保持原样。实际上不建议在其中放置一个:https://stackoverflow.com/a/30167059/769971

在本地尝试使用它可以解决我的问题。

编辑:我还应该提到,像链接的答案一样,您必须修改python路径以包含要测试的模块。或使用类似nose之类的东西为您解决所有问题。

答案 1 :(得分:0)

另一种方法是保持导入和包的状态不变,但是只需在运行测试之前设置PYTHONPATH

PYTHONPATH=$PYTHONPATH:src python -m unittest discover