Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在Python3中模拟时正确访问导入的名称空间_Python 3.x_Unit Testing - Fatal编程技术网

Python 3.x 在Python3中模拟时正确访问导入的名称空间

Python 3.x 在Python3中模拟时正确访问导入的名称空间,python-3.x,unit-testing,Python 3.x,Unit Testing,我正在用Python3启动一个新项目。我打算将此作为一个PIP包,因此我从一个cookiecutter模板开始,如下所示: cycle_calendar_generator /cycle_calendar_generator __init__.py cycle_calendar_generator.py /tests __init__.py test_cycle_calendar_generator.py 这个项目将在我的学校广泛使用,所以我想从一开始就做坚实的单元测试。我宁愿

我正在用Python3启动一个新项目。我打算将此作为一个PIP包,因此我从一个cookiecutter模板开始,如下所示:

cycle_calendar_generator
/cycle_calendar_generator
  __init__.py
  cycle_calendar_generator.py
/tests
  __init__.py
  test_cycle_calendar_generator.py
这个项目将在我的学校广泛使用,所以我想从一开始就做坚实的单元测试。我宁愿坚持使用包含Python 3的单元测试模块,因为它们很简单,可以做我想做的事情

问题是我需要模拟核心API模块,比如argparse和os。我看到一些建议,您应该模拟导入的核心API模块的名称空间,而不是模块本身。(因此模拟周期_calendar_generator.argparse是正确的,但导入argparse并模拟它是错误的,因为它是argparse的不同副本。)

话虽如此,以下是我在test_cycle_calendar_generator.py中的内容:

import unittest
from unittest import mock

from cycle_calendar_generator import cycle_calendar_generator


class Test_get_args(unittest.TestCase):
    """Tests for `cycle_calendar_generator` package."""

    def setUp(self):
        """Set up test fixtures, if any."""

    def tearDown(self):
        """Tear down test fixtures, if any."""

    @mock.patch('cycle_calendar_generator.argparse.parse_args')
    def test_if_arg_is_string(self, mock_parse_args):
        mock_parse_args.return_value = cycle_calendar_generator.argparse.Namespace(directory='string')
        self.assertIsInstance(cycle_calendar_generator.getArgs(), str)
这给了我一个错误
AttributeError:模块'cycle\u calendar\u generator'没有属性'argparse'
,因此它显然找不到导入的argparse,但我不知道如何解决它。知道会发生什么吗?谢谢

AttributeError:模块“周期日历生成器”没有属性“argparse”

应该是:

@mock.patch('cycle_calendar_generator.cycle_calendar_generator.argparse.ArgumentParser.parse_args')
不是

不是


现在这给了我一个错误:
AttributeError:没有属性'parse_args'
@ROldford,我们通常不模拟或测试
argparse
,我更新了模拟,以防你仍然想这样做。我今天早些时候确实得到了,但谢谢!多亏了你的帮助,终于取得了进步。
@mock.patch('cycle_calendar_generator.cycle_calendar_generator.argparse.parse_args')
@mock.patch('cycle_calendar_generator.argparse.parse_args')