【发布时间】:2015-10-26 08:53:03
【问题描述】:
我有以下 django 模型
class Charge(models.Model):
total = models.PositiveIntegerField()
def execute():
# make some external calls
return invoice_url
class Transaction(models.Model):
product = models.ForeignKey(Product)
charge = models.ForeignKey(Charge)
def do_charge():
self.charge = Charge.objects.create(total=self.product.price)
url = self.charge.execute()
return url
我正在尝试通过模拟对execute 的调用来测试do_charge。
问题是对象是在do_charge 中创建的。
类似的东西(这显然不是为了说明)
@mock.patch('Charge.execute')
def test_should_return_url(self, mock):
mock.side_effect = 'www.foo.testing/invoice'
t = Transaction.objects.create(product=p1)
invoice_url = t.do_charge()
self.assertIsEqual(invoice_url, 'www.foo.testing/invoice')
可以模拟Charge.execute吗?
python 3.4,django 1.8。
【问题讨论】:
-
执行不是静态方法,是吗?
-
不,是实例方法。
标签: django unit-testing mocking