测试是否使用mock调用python的内置__mul__

时间:2018-01-10 02:26:01

标签: python unit-testing python-mock

我有一种方法可以在调用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)

我该如何测试?

1 个答案:

答案 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值(主要是数量)。