gpt4 book ai didi

python - 如何模拟 python dict __str__ 方法?

转载 作者:太空宇宙 更新时间:2023-11-04 04:44:06 28 4
gpt4 key购买 nike

我有一个方法将需要包含某些条目的字典作为参数。例如,我可能希望 dict 中有一个 type 键,其值需要是 ['typeA', 'typeB', 'typeC'] 之一。如果缺少一个键,我会让方法抛出一个异常,SpecFormatException。异常消息应该是这样的:'type' entry is missing in spec dict: {'foo': 'bar', 'baz': [1, 2, 3]}

我正在编写一个测试来验证是否使用正确的错误消息抛出异常,但是由于 dict.__str__() 方法的输出是不确定的,所以我的测试是不稳定的。我想,如果我可以修补 dict.__str__() 方法来输出类似“是的,我是你的字典”这样的东西,那么我就可以解决这个问题,但是当我尝试修补我的测试时:

import mock
import my_verifier

@mock.patch('my_verifier.dict')
def testErrorMessage(this, dict_str):
dict_str.return_value = 'YES I AM YOUR DICTIONARY'
...

我在尝试运行测试时收到错误消息“my_verifier.py 没有属性‘dict’”。

我假设模拟 __str__ 方法是正确的方法,但我该怎么做呢?

最佳答案

您对错误消息的测试需要有多具体?你能不能断言你期望的某些部分在那里,例如:

import pytest

def test_my_method_error_message():
offending_key = 'test'
data = {offending_key: 'whatever'}
with pytest.raises(SpecFormatException) as excinfo:
my_method(data)
assert data in str(excinfo.value)

显然,您可能还需要测试消息的其他部分。测试 EXACT 字符串可能是也可能不是您想要做的,因为该消息可能会更改。如果您需要走那条路,我建议您将字符串(或字符串模板)存储在任何地方都可以访问的地方,这样您的测试就可以根据类变量或配置参数进行断言。

关于python - 如何模拟 python dict __str__ 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50010485/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com