使用 Py.Test 进行单元测试的 Python Mocking

标签 python unit-testing pytest

class TestHBVbs3(object):
      @patch.object(Hbvbs3, 'GetConfigClass')
      def test_get_grower_list(self, config_data, mock_requests_get):
          # Arrange
          config_data.return_value = ConfigMock()
          post_response = {'1st_key': '1st_value', '2nd_key': '2nd_Value'}
          mock_requests_get.return_value = MagicMock(status_code=200, post_response=post_response)

          # Act
          sut = Hbvbs3()
          the_response = sut.get_growers_list()

          # Assert
          assert_equals(the_response.response["1st_key"], mock_requests_get.return_value.response["1st_key"])
          assert_equals(the_response.response["2nd_key"], mock_requests_get.return_value.response["2nd_key"])
          assert_equals(the_response.response, mock_requests_get.return_value.response)
          assert_equals(the_response.status_code, mock_requests_get.return_value.status_code)

Actual code in hbvbs3.py:
class Hbvbs3(object):
        _logger = log.logging.getLogger("Hbvbs3")

    def get_growers_list(self):
            dbconfig = GetConfigClass()

我的问题:
我不知道如何成功使用注释来模拟这个:@patch.object(Hbvbs3, 'GetConfigClass') # 这段代码不起作用。
我最终不得不将 GetConfigClass 实例化放入一个实用程序方法中并模拟该调用,但希望我能在方法本身中实际模拟此特定实例化时获得帮助:“get_growers_list(self):”...
- 如何使用模拟注释在我的类 Hbvbs3 的实例方法中成功模拟这种实例化?
我在注释中尝试了各种组合,例如:
@patch('Hbvbs3.GetConfigClass')
@patch.object(Hbvbs3, '__main__.GetConfigClass')
@patchHbvbs3('_get_growers_list.GetConfigClass')

这些都不起作用,那么有没有办法在python中使用注释简单地模拟这种实例化?这似乎并不难,但如果我能找到注释的正确组合,我会很危险。
请让我知道我哪里出错了?
谢谢!

最佳答案

它看起来像您的文件 hbvbs3.py 的代码在顶部有这种导入语句:

from config import GetConfigClass

... 和 GetConfigClass正如您在 Hbvbs3 中所显示的那样使用.因此更换GetConfigClassMock例如,您可以使用 patch 的装饰器形式:
@patch('[...].hbvbsp3.GetConfigClass')

您需要确保使用的路径是 hbvbsp3 的完整路径。模块(替换 [...] - 为了清晰起见,我通常使用项目根目录中的完整 python 路径)。我总是在 Where to patch 上找到文档有用。

关于使用 Py.Test 进行单元测试的 Python Mocking,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37032656/

相关文章:

python - 使用有用的消息终止 Python 命令行脚本

python - 通过python中的TCP套接字在客户端-服务器之间发送文件?

powershell - 运行pester测试时如何使管道中的输出出现在控制台上?

Python 通过 SSH 身份验证克隆私有(private) GitHub 存储库,无需访问 ssh 二进制文件(在 Azure Functions 下)

javascript - 如何模拟或调用基本的 javascript 函数?

java - 我有一段代码,即带有 try 和 catch block 的方法。 catch block 捕获异常,我该如何为其编写失败 junit?

python - pytest中的测试用例执行顺序

python - 如何在收集阶段从 pytest 插件写入控制台?

python - 分配空列表

没有 py 扩展名的 python-sphinx 文档化脚本