0

我正在测试使用动态创建函数的返回值的代码。我需要确保我正在测试的代码使用欺骗数据正确调用了一个名为“email_invoice”的函数......

动态创建的函数命中远程系统,所以我伪造了调用的结果。

class MyTest(unittest2.Test):

    def setUp(self):

        patcher = mock.patch('soc.product.views.API')
        patch = patcher.start()

        self.order_id = 'fake_order_id'

        # The `API` class has methods that are dynamically created.
        # The method `API.CreateOrder` needs to be patched to return `self.order_id`
        # When testing that a resulting method is called, I get a failed assertion:

        #AssertionError: Expected call: email_invoice(<User: User(id=46, merchant_id=503579)>, 'fake123123123')
        #Actual call: email_invoice(<User: User(id=46, merchant_id=503575)>, <MagicMock name='API().CreateOrder().OrderID' id='140700602174736'>)

        # soc.product.views.API.CreateOrder => self.order_id
        CreateOrderResult = mock.NonCallableMock()
        CreateOrderResult.OrderId = self.order_id
        patch.CreateOrder = mock.Mock()
        patch.CreateOrder.return_value = CreateOrderResult


    def test_that_stuff_out_homie(self):

         ... doing stuff ...

         user = ... a result of doing stuff ...

         self.patches['email_invoice'].assert_called_once_with(user, self.order_id)

正如它所提到的,断言失败如下:

AssertionError: Expected call: email_invoice(<User: User(id=46, merchant_id=503579)>, 'fake123123123')
Actual call: email_invoice(<User: User(id=46, merchant_id=503575)>, <MagicMock name='API().CreateOrder().OrderID' id='140700602174736'>)

那么,测试这一点的正确/正确方法是什么?

4

1 回答 1

1

您分配self.order_idOrderId但从 API 获取 id OrderID(注意字符串末尾的大写字母)。

于 2013-10-07T19:01:27.727 回答