簡體   English   中英

為什么unittest.mock.ANY無法正確使用Django對象?

[英]Why doesn't unittest.mock.ANY work correctly with Django objects?

我已經在Django中編寫了一個測試,並且正在使用unittest.mock.ANY來忽略字典中的某些值 這是測試:

from django.test import TestCase
from django.contrib.auth import get_user_model
import unittest.mock as mock

class Example(TestCase):
    def test_example(self):
        user = get_user_model().objects.create_user(username='example')
        result = {'user': user, 'number': 42}
        self.assertEqual(
            result,
            {'user': mock.ANY, 'number': 42}
        )

如果我運行此測試,我希望它能夠通過。 相反,我得到了這個失敗:

======================================================================
FAIL: test_example (example.tests.Example)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "example/tests.py", line 18, in test_example
    'number': 42,
AssertionError: {'user': <User: example>, 'number': 42} != {'user': <ANY>, 'number': 42}
- {'number': 42, 'user': <User: example>}
?                         ^^^^^^^^^^^^^

+ {'number': 42, 'user': <ANY>}
?                         ^^^

在這種情況下,為什么沒有ANY作用? 它似乎適用於字符串和數字。

assertEqual在比較其兩個參數的過程中,將對表達式user == mock.ANY 以標准方式, left參數確定哪個函數實際實現== 在這種情況下,您具有user.__eq__(mock.ANY) 看來,無論user__eq__類型,其__eq__方法都會為意外類型簡單地返回False 如果改為引發NotImplemented ,則該語言將依賴於mock.ANY.__eq__(user) ,后者可以返回True

如果將呼叫更改為

self.assertEqual(
            {'user': mock.ANY, 'number': 42},
            result,
        )

那么結果比較的mock.ANY == user將按預期返回True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM