【发布时间】:2018-01-10 02:26:00
【问题描述】:
我有一种方法可以在调用 api 之前将美元转换为美分。
# money.py
def send_money(dollars):
cents = dollars * 100
return send_money_to_api(cents)
* 这不完全是我的代码。但这对于演示来说已经足够了。
dollars 的类型是 decimal.Decimal,因为它实际上来自 django 的 DecimalField。
我想确保将金额乘以 100。我尝试使用模拟进行测试
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)
它没有说,
E ImportError: No module named operator
我该如何测试?
【问题讨论】:
-
它还能叫什么?您是否担心有人将
dollars作为具有自己的__mul__的类的实例传递?你担心什么? -
我担心某些开发人员/我会忘记进行转换。
-
dollars的类型是什么?没有内置的__mul__,但每个对象都有自己的__mul__函数。所以如果要mock这个函数,就需要mockdollars的类。 -
dollars的类型是int -
等等。实际上是
decimal.Decimal,因为它来自django的DecimalField
标签: python unit-testing python-mock