繁体   English   中英

放置python单元测试的位置

[英]Where to place python unittests

我有一个目录结构如下:

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()

我收到错误“父模块''未加载,无法执行相对导入”的行:

from . import MyClass

我想将unittests放在被测模块旁边的'unittests'目录中。 有没有办法做到这一点,并有权访问我正在测试的父目录中的所有模块?

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

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

这应该正确找到您的模块。 请参阅测试发现

使用您想要的任何布局,具体取决于您自己的首选项以及您希望导入模块的方式:

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM