python - UnitTest Python Mock 第一次调用方法,第二次调用照常进行

标签 python unit-testing python-unittest python-unittest.mock

我在模拟一个方法。我想在第一次调用时引发异常,但在异常时,我用不同的参数再次调用该方法,所以我希望第二次调用能够正常处理。我需要做什么?

代码

尝试1

with patch('xblock.runtime.Runtime.construct_xblock_from_class', Mock(side_effect=Exception)):

尝试2

with patch('xblock.runtime.Runtime.construct_xblock_from_class', Mock(side_effect=[Exception, some_method])):

在第二次调用时,some_method 原样返回,并且不使用不同的参数处理数据。

最佳答案

class Foo(object):
  def Method1(self, arg):
    pass

  def Method2(self, arg):
    if not arg:
      raise
    self.Method1(arg)

  def Method3(self, arg):
    try:
      self.Method2(arg)
    except:
      self.Method2('some default value')

class FooTest(unittest.TestCase):
  def SetUp(self):
    self.helper = Foo()

  def TestFooMethod3(self):
    with mock.patch.object(self.helper, 'Method2', 
                           side_effect=[Exception,self.helper.Method1]
                           ) as mock_object:
      self.helper.Method3('fake_arg')
      mock_object.assert_has_calls([mock.call('fake_arg'),
                                    mock.call('some default value')])

关于python - UnitTest Python Mock 第一次调用方法,第二次调用照常进行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34136420/

相关文章:

python - 我可以在单元测试中比较 2 个 float 的相似性但不相等吗?

Python izip 和重复内存行为

android - 当测试项目在 libs 目录中有 jar 时,无法构建和运行使用 "ant create test-project"创建的 android 测试项目

java - 在 Mockito 中 stub 方法时,我应该使用原始实例还是 stub 实例进行测试?

asp.net-mvc - 模型单元测试能否真正独立以及如何[ASP.NET MVC]

python - 使用 unittest 测试记录器消息

python - 如何重用使用 unittest.testcase 编写的测试

python - 统计当月星期日的个数

python - python中随机选择

python - 将 PySpark 数据帧记录到 MLFlow 工件中