我有一种方法可以在调用api之前将美元兑换成美分。
# money.py
def send_money(dollars):
cents = dollars * 100
return send_money_to_api(cents)
*这不完全是我的代码。但这足以证明。
dollars
的类型为decimal.Decimal
,因为它实际上来自django
的{{1}}。
我想确保我将金额乘以100.我尝试使用模拟测试
DecimalField
它说不出来,
import mock
from money import send_money
@mock.patch('money.operator.__mul__')
@mock.patch('money.send_money_to_api')
def test_money(self, api_mock, mul_mock):
send_money(20)
assert api_mock.called
mul_mock.assert_any_call(20, 100)
我该如何测试?
答案 0 :(得分:0)
我能够在评论的帮助下解决这个问题。特别感谢@Sraw。
@mock.patch.object(decimal.Decimal, '__mul__')
@mock.patch('money.send_money_to_api')
def test_money(self, api_mock, mul_mock):
send_money(20)
assert api_mock.called
mul_mock.assert_any_call(100)
模拟decimal.Decimal
实例方法__mul__
的一个优点是我可以真正确保转换数据库中的所有DecimalField
值(主要是数量)。