我正在尝试测试一些构造email.mime.text.MIMEText
对象的代码,并且需要确保在调用构造函数时将正确的文本传递给_text
参数。
我可以像这样模拟构造函数:
(flexmock(email.mime.text.MIMEText)
.should_receive('__init__')
.with_args('message text', _charset='utf-8'))
从某种意义上说,这是有效的,如果未使用适当的参数调用构造函数,则测试将失败,因为期望将失败。但是,由于__init__
现在是一个存根函数,所以返回的对象不是完整的格式,并且使用它的代码将由于其属性未正确设置而出现随机故障。
到目前为止,我发现的唯一解决方法是模拟所有我在对象上调用的其他方法,以使它们不依赖于完全形成的对象,但这属于“测试过多”的领域。
是否有一种机制可以在根据参数检查期望值后允许__init__
方法完成其所有正常工作?我确实尝试使用should_call
,但这导致期望也与超类__init___
调用匹配,后者没有相同的签名。