Noestests:在多个文件上运行Nosetests时使用@patch的AttributeError

时间:2016-06-15 12:44:01

标签: python unit-testing testing nose

我在多个文件中运行测试并获得与导入特定文件有关的错误,我实际上并不确定错误与之相关,我认为这是导入的内容或者其他内容修补它。错误本身看起来像:

(我为使用@patch装饰器的每个测试函数得到了其中一个错误)

my_package
    - my_module
        - __init__.py
        - utils.py
        - other.py
    - tests
        - test_utils.py
        - test_other.py

包结构如下所示:

nosetests -e unit --with-coverage --cover-package=my_package --cover-erase --cover-xml --with-xunit tests --nocapture

nosetests命令:

from my_module.utils import * class TestBusinessProcess(unittest2.TestCase): @patch('my_module.utils.something') def test_some_utils_function(self, something_mock): # test implementation.. # this function will throw: # AttributeError: 'module' object has no attribute 'utils' # when running whole tests folder and not on individual test file pass @patch('my_module.utils.something_else') def test_some_other_utils_function(self, something_else_mock): # test implementation.. # same as above pass

所以奇怪的是,如果我只在utils测试类本身运行nosetests,它运行正常,所有导入工作,所有补丁都可以工作,没有错误,所有测试都通过。

这是test_utils.py文件的样子:

from my_module.other import *

class TestBusinessProcess(unittest2.TestCase):        

    @patch('my_module.other.something')
    def test_some_function(self, something_mock):
        # test implementation..
        # no issues!
        pass

    @patch('my_module.other.something_else')
    def test_some_other_function(self, something_else_mock):
        # test implementation..
        # no issues!
        pass

另一个测试文件中的测试示例,无论何时运行都没有问题:

base R

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我仍然不知道出了什么问题,但这似乎与导入有关。

无论如何,这种解决方法解决了这个问题,但不确定原因。

__init__.py中的my_module最初为空。然后我对其进行了编辑,以揭示utils.py

的各个功能

__init__.py

from utils import test_some_utils_function, test_some_other_utils_function

__all__ = [
    "test_some_utils_function",
    "test_some_other_utils_function"
]