当前位置: 首页 > 知识库问答 >
问题:

Python-如何断言没有使用特定参数调用模拟对象?

金伟
2023-03-14

我意识到 unittest.mock 对象现在有一个可用的assert_not_called方法,但我正在寻找的是一个assert_not_called_with。有这样的事情吗?我查看了Google,没有看到任何东西,当我尝试仅使用mock_function.assert_not_called_with(...)时,它引发了一个AttributeError,这意味着该函数不存在该名称。

with self.assertRaises(AssertionError):
    mock_function.assert_called_with(arguments_I_want_to_test)

这有效,但如果我想进行几次这样的调用,则会使代码混乱。

断言没有使用Mock调用函数/方法

共有3个答案

冯风史
2023-03-14

使用Pytest,我断言“AssertionError”被调用:

import pytest
from unittest.mock import Mock


def test_something():
    something.foo = Mock()
    
    # Test that something.foo(bar) is not called.
    with pytest.raises(AssertionError):
        something.foo.assert_called_with(bar)
查学文
2023-03-14

另一个使用模拟通话历史记录的解决方案:

from unittest.mock import call

assert call(arguments_I_want_to_test) not in mock_function.mock_calls
龙承德
2023-03-14

您可以自行将assert_not_called_with方法添加unittest.mock.Mock 中:

from unittest.mock import Mock

def assert_not_called_with(self, *args, **kwargs):
    try:
        self.assert_called_with(*args, **kwargs)
    except AssertionError:
        return
    raise AssertionError('Expected %s to not have been called.' % self._format_mock_call_signature(args, kwargs))

Mock.assert_not_called_with = assert_not_called_with

因此:

m = Mock()
m.assert_not_called_with(1, 2, a=3)
m(3, 4, b=5)
m.assert_not_called_with(3, 4, b=5)

输出:

AssertionError: Expected mock(3, 4, b=5) to not have been called.
 类似资料:
  • 出于学校目的,我正在创建一个使用股票API的应用程序。 我正在尝试为一种获取过去10年所有股票数据的方法编写一个测试。我不想实际获取所有这些数据,而是想抛出一个异常。 我想测试的方法: 股票时间系列(....)调用可以抛出阿尔法仓位异常。 我这样嘲弄了TimeSeries类: 在我的测试类中,我想模拟这个调用,并返回一个异常而不是实际数据。 无论我多么试图嘲笑这段代码,它永远不会抛出异常。它将始终

  • 问题内容: 我正在尝试在Selenium测试中以其他用户身份运行IE。知道如何告诉Selenium Webdriver以“指定用户身份”运行吗? 问题答案: 好的,我认为您正在寻找的是有关.NET(C#)网络凭据模拟的这篇文章。 您使用那里确定的包装器类来调用您的测试类,该类应使用您提供的域和用户生成Webdriver。 尽管有一些“陷阱”,您应该了解在“ 了解模拟”下可以找到的所有安全最佳实践。

  • 我有一个测试,如下所示,在给定条件下,我想确保。 然而,它错误地指出 错误出现在行 应为不是模拟对象。如何测试为非模拟对象调用的方法? 我在如何验证一个非模拟对象的方法中看到了答案?,但这仍然是使用模拟和间谍。我希望找到一种不需要嘲笑我已经拥有的类实例的方法。 (注:以上内容以科特林书写)

  • 问题内容: 我试图测试在链接上单击“ preventDefault”是否被调用。但是,我很难用我可以监视的对象来替换一个真实的“事件”对象: 这是触发点击事件的方式: 但是,在运行指令代码时,事件元素不会被伪造的事件元素替代: 我尝试了不同的方法向触发器处理程序添加第二个参数- 作为数组,对象,只是一行,等等。都没有用。.同时没有太多的触发器处理程序示例和附加参数,所以我有点丢失… 提前致谢! 问

  • 我有一个jUnit测试,测试我的一个函数。在这个函数中,我调用了另一个类的方法,我想用mockito模拟这个方法。然而,我似乎不能实际嘲笑这一点。下面是我的jUnit测试的样子: 编辑:在我的MainClassImTesting()中。我正在调用的test()函数,它调用authenticateUser()并向它传递一个hashMap。

  • 我试图模拟对resttemplate.exchange()的调用,但无法使其工作。当前,对exchange()的调用挂起,所以我认为正在调用的是实际的方法,而不是我的模拟方法。对exchange()的调用如下:

  • 我想定义一个函数。将多个元素展平为一个数组的展平函数。我知道以下是不可能的,但基本上我想这样做: 我得到以下错误: 使用.reduce()重写.flant有什么好方法吗? 注意:我知道还有很多其他方法可以在javascript中展平数组,但是我想知道的是如何使用特定的参数来做到这一点。

  • 问题内容: 我有UIWebview,它可以对外部服务进行AJAX调用。离线时,我需要捕获这些请求并返回本地json。 我实现了NSURLProtocol并设法捕获AJAX请求,问题是jquery始终返回0错误代码: }); 我总是收到一个请求。状态= 0 为了测试我的协议,我尝试在html中模拟图像,并且效果很好。 从google.fr =>对图像的HTML请求 工作正常 在亚马逊=>上对json