py.test 无法导入我的模块

py.test can't import my module

我正在努力获得 python 导入权。我想要实现的是拥有一个包含多个源文件的模块和一个包含单元测试的测试文件夹。

无论我做什么,我都无法让 py.test-3 执行我的测试。我的目录布局如下所示:

.
├── module
│   ├── __init__.py
│   └── testclass.py
└── tests
    └── test_testclass.py

__init__.py 文件如下所示:

__all__ = ['testclass']

testclass.py 文件如下所示:

class TestClass(object):

    def __init__(self):
        self.id = 1

我的单元测试是这样的:

import pytest
from module import TestClass

def test_test_class():
    tc = TestClass()
    assert(tc.id==1)

不管我怎么调用 py.test-3 我都会得到一个:

E   ImportError: No module named 'module'

首先,除非您更改 tests/test_testclass.py,否则您需要按如下方式更改 module/__init__.py

from .testclass import TestClass

__all__ = ['TestClass']

并且,当您 运行 py.test 设置 PYTHONPATH 环境变量让解释器知道何时查找模块时:

PYTHONPATH=. py.test

我会在一个 header 的测试文件中放入 pytest 的执行路径:

示例:

import os, sys                                                                  
sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir))

有了这个我就可以知道我的(测试)项目中任何子文件夹的路径