放置python单元测试的位置

时间:2015-10-10 16:50:35

标签: python python-unittest

我的目录结构如下:

DirA
    __init__.py
    MyClass.py
    unittests   <------------------directory
        MyClassTest.py

MyClassTest.py是可执行的:

import unittest
from . import MyClass    

class MyClassTestCase(unittest.TestCase):
    """ Testcase """

...
.....

if __name__ == '__main__':
    unittest.main()

我收到错误&#34;父模块&#39;&#39;未加载,无法执行相对导入&#34;在这一行:

from . import MyClass

我想将单元测试放在&#39;单元测试&#39;正在测试的模块旁边的目录。有没有办法做到这一点,并有权访问我正在测试的父目录中的所有模块?

3 个答案:

答案 0 :(得分:2)

您是否尝试过像这样运行测试:

cd DirA
python -m unittest discover unittests "*Test.py"

这应该可以正确找到您的模块。见Test Discovery

答案 1 :(得分:1)

根据您自己的偏好以及您希望导入模块的方式,使用您想要的任何布局:

要查找unittests文件夹,因为该名称不是常规名称(默认情况下单元测试脚本会查找test文件夹),您可以使用discover选项unittest模块,告诉您如何找到测试脚本:

python -m unittest discover unittests

请注意,第一个unittest是Python模块,第二个unittests(带有s)是您放置测试脚本的目录。

另一种方法是使用nosetest模块(或其他新的单元测试模块,如pytesttox),无论您将它们放置在何处,都应自动找到您的测试脚本:

nosetests -vv

要修复导入错误,您应该使用完整的相对(或绝对)路径:

from ..MyClass import MyClass # Relative path from the unittests folder
from MyClass import MyClass # Absolute path from the root folder, which will only work for some unit test modules or if you configure your unit test module to run the tests from the root

答案 2 :(得分:0)

建议的结构,就是看看你的结构:

my_app
    my_pkg
        __init__.py
        module_foo.py
    test
        __init__.py
        test_module_foo.py
    main.py

my_app内运行所有内容,这样您就可以在测试代码和核心代码之间使用所有相同的模块引用。