我寫了這個測驗,但是為了不耽誤測驗,我模擬了time.sleep,測驗會遇到失敗。
from unittest.mock import patch
from django.core.management import call_command
from django.db.utils import OperationalError
from django.test import TestCase
class CommandsTest(TestCase):
@patch('time.sleep', return_value=None)
def test_wait_for_db(self):
"""Test waiting for db"""
with patch('django.utils.connection.BaseConnectionHandler.__getitem__') as gi:
gi.side_effect = [OperationalError] * 5 [True]
call_command('wait_for_db')
self.assertEqual(gi.call_count, 6)
通過評論第二行(@patch),程式將正常運行。這是錯誤:
ERROR: test_wait_for_db (core.tests.test_commands.CommandsTest)
Test waiting for db
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/local/lib/python3.10/unittest/mock.py", line 1369, in patched
return func(*newargs, **newkeywargs)
TypeError: CommandsTest.test_wait_for_db() takes 1 positional argument but 2 were given
uj5u.com熱心網友回復:
您需要在test_wait_for_db. 由于您使用裝飾器,因此模擬函式作為引數傳遞給該函式
class CommandsTest(TestCase):
@patch('time.sleep', return_value=None)
def test_wait_for_db(self, mocked_sleep):
在您的測驗中,您可以測驗斷言是否確實被呼叫。更多資訊在這里。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/491201.html
上一篇:方法單元測驗在nestjs中失敗
下一篇:計算日期范圍內出現的次數
