【问题标题】:Python: Unpack call_args_list from unittest.mockPython:从 unittest.mock 解压 call_args_list
【发布时间】:2018-01-18 07:51:20
【问题描述】:

我想解压模拟方法的参数。我有一个被测试代码调用的模拟订阅者,我想验证 notify() 方法的调用。

class Subscriber:
    def notify(self, event):
        pass

我正在使用以下 sn-p 解包参数并验证两个调用:

calls= self.subscriber.notify.call_args_list
event1 = calls[0][0][0]
event2 = calls[1][0][0]

assert_that(event1, instance_of(CreatedEvent))
assert_that(event1.file.name, equal_to("foo.txt"))

但是解压事件的两行代码非常笨拙,而且与可读代码相差甚远。 有人知道解包参数的更好方法吗?

非常感谢!

【问题讨论】:

  • 你将如何处理event1event2?我不明白...
  • 更新了问题。 :-)

标签: python python-3.x mocking python-unittest python-unittest.mock


【解决方案1】:

如果您尝试在每次调用中为事件声明相同的内容,那么使用简单的 for 循环可能会有所帮助:

for call in calls:
    event = call[0][0]
    assert_that(event, instance_of(CreatedEvent))
    assert_that(event.file.name, equal_to("foo.txt"))

【讨论】:

    【解决方案2】:

    您可以使用assert_has_calls

    calls.assert_has_calls(call(ANY, ...), call(...))
    

    【讨论】:

      猜你喜欢
      • 2017-02-01
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多