2015-09-03 32 views
0

我有一个Django窗体类的实例方法,如果成功,它将从支付服务返回一个Python对象。难以模拟修补功能返回的对象

该对象有一个id属性,然后我坚持Django模型实例。

我有一些困难,让嘲笑的对象返回其.id属性正确。

# tests.py 

class DonationFunctionalTest(TestCase): 

    def test_foo(self): 

     with mock.patch('donations.views.CreditCardForm') as MockCCForm: 
      MockCCForm.charge_customer.return_value = Mock(id='abc123') 

      # The test makes a post request to the view here. 

      # The view being tested calls: 

      # charge = credit_card_form.charge_customer() 
      # donation.charge_id = charge.id 
      # donation.save() 

但是:

print donation.charge_id 

# returns 
u"<MagicMock name='CreditCardForm().charge_customer().id' 

我期望看到 “ABC123” 为donation.charge_id,而是我看到了MagicMock的Unicode表示。我究竟做错了什么?

回答

1

得到它通过不同的做修补了一下工作:

@mock.patch('donations.views.CreditCardForm.create_card') 
@mock.patch('donations.views.CreditCardForm.charge_customer') 
def test_foo(self, mock_charge_customer, mock_create_card): 

    mock_create_card.return_value = True 
    mock_charge_customer.return_value = MagicMock(id='abc123') 

    # remainder of code 

现在的ID相匹配我的期望。尽管如此,我仍然想知道我在前面的代码中做了什么错误。