问题标签 [python-unittest.mock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
562 浏览

python - 如何模拟未初始化的全局变量?

我的模块中有一个未初始化的全局变量,该变量在应用程序启动期间已正确初始化。对于类型检查,我使用var: Type没有来自 python >= 3.6 的值的语法,因此我不必使默认值的类型检查复杂化(这将是None)。

现在我想对另一个使用这个全局变量的函数进行单元测试,但是我从unittest.mock.patch. 这是我正在做的简化版本:

  • 文件 mod.py:
  • 文件 test.py:
  • 我用python3 -m unittest test.py.

例外是

如果我在 mod.py 中注释第 1 行并取消注释第 2 行,则测试通过。

有没有办法让测试通过而无需在我的应用程序代码中为全局变量定义默认值?


编辑:如评论中所述,实际变量是一个解析的配置文件,我不想在测试期间加载它。它用于命令行应用程序,因此始终在命令行解析完成后设置变量。真正的代码在这里这里。在实际测试中,我不是直接将全局变量模拟为布尔值,而是模拟配置对象上的某些属性。
0 投票
2 回答
301 浏览

python - Python 3如何为try编写单元测试,除了模块中的外部函数

我想知道如何为try except在 Python 模块中的函数定义之外定义的块编写 Python 3 单元测试。

想象一下,package/module.py我有一段代码,例如:

导入操作系统

(请不要介意实际代码,我知道我可以os.getenv('NOT_EXISTING_KEY', False)在这种特定情况下使用,我感兴趣的是真正测试模块中的 try-except 块(函数外部)是否按预期运行。

如何编写一个单元测试来检查package.module.CONSTANT是否设置为预期值?

在 unittest 文件(我使用 pytest)中,我有类似的内容:

测试如果 try 块正确执行,那么 CONSTANT 是否符合预期。

但是,我不知道如何模拟导入机制,以便 try 块中的 os.environ 引发异常,并且我可以测试 CONSTANT 是否设置为 False。

我怎样才能做到这一点?

0 投票
0 回答
1067 浏览

python - 适用于 AWS S3 的 Python boto3 模拟单元测试

我目前正在学习如何为 boto3 编写单元测试

我正在尝试遵循moto 文档并为单元测试编写了几行代码,但它给了我错误:

错误:AttributeError: 'NoneType' object has no attribute 'upload_to_s3'

我已经为此苦苦挣扎了一整天,有人可以给我一个例子或一些提示,在此先感谢。

0 投票
1 回答
1271 浏览

python-3.x - 导入模块中的python模拟导入

我正在尝试使用 unittest.mock 来模拟被测模块中的导入。

我所看到的是,虽然我的模块调用 sleep 5 次,但我在测试函数中与之交互的模拟对象并不是我所期望的。

我假设我没有正确地做某事。我确实阅读了文档,但我确定我没有正确执行此操作。

0 投票
2 回答
7503 浏览

python - Python unittest正确设置全局变量

我有一个简单的方法,可以根据方法参数将全局变量设置为 True 或 False。

这个全局变量被调用feedback并且有一个默认值False

当我调用setFeedback('y')全局变量时,将更改为feedback = True. 当我调用setFeedback('n')全局变量时,将更改为feedback = False.

现在我正在尝试在 Python 中使用 unittest 进行测试:

当我运行此测试时,我收到以下错误:AssertionError: False is not true.

由于我知道该方法可以正常工作,因此我假设全局变量以某种方式被重置。但是,由于我对 Python 环境还很陌生,所以我不知道自己做错了什么。

我已经在这里阅读了一篇关于 mocking 的文章,但是由于我的方法更改了一个全局变量,我不知道 mocking 是否可以解决这个问题。

我将不胜感激。

这是代码:

主要.py:

test_main.py:

0 投票
1 回答
285 浏览

python - unittest.mock:在指定的模拟对象上设置自定义属性(变量)

我正在尝试mock使用另一个库的类中的现有对象进行单元测试pytest。但是,来自其他库的属性(不是方法)大多是在运行时设置的。

我想要达到的目标

  • 获得模拟对象的所有好处spec
  • 设置我的单元测试所需的(嵌套)属性(不是方法)以模拟它们,就像它们是在对象创建期间设置的一样

我在代码更改中进行了这些尝试,但没有成功

0 投票
1 回答
32 浏览

python - 模拟不覆盖 Python 中函数的返回

我正在对我的项目的一个类进行单元测试。我要测试的方法是queryCfsNoteVariations

其中有一个路径:/com/pdfgather/PDFReportDao.py

在我的测试中,我正在对位于 /com/pdfgather/GlobalHelper.py 中的 dbFind() 方法进行修补。我当前的测试如下所示:

但是,我没有得到我想要的结果,即进入循环并从循环内部返回。相反,dbFind 没有返回任何内容(但它不应该因为我已经为 dbFind 预先分配了返回值)。

提前致谢!

0 投票
1 回答
687 浏览

python-3.x - 用不同的返回值模拟相同的方法

我想get_age()根据传递的参数修补我拥有的方法。

假设我有get_age.py多次使用相同get_age()方法的地方。

然后在测试中我想做:

如何根据传递的名称模拟相同的方法?谢谢!

0 投票
1 回答
92 浏览

python - Python模拟测试函数数组

以下是我的python模块my_func.py

我想测试是否在函数内部function_1使用正确的request参数get_data()调用,并且以下测试工作正常。

如果我将我的 python 模块更改my_func.py为以下我有一系列函数的地方,那么我正在努力如何单独模拟函数。

0 投票
1 回答
619 浏览

python - 如何在 Django 中模拟一个函数?

我希望无论传入什么内容,以下调用都会which_user返回,但它的行为就好像它根本没有被嘲笑。self.user

我在这里做错了什么?我是这样导入which_user的:from impersonate.helpers import which_user如果有帮助的话。