我試圖斷言模擬的方法被呼叫一次并期望它通過。mock_create_pool但不知何故,mock_insert, 和的呼叫計數mock_close為 0 而不是 1 或更多。如何測驗這些功能是否至少運行一次?
目錄結構
- 源代碼
- 邏輯
- 主檔案
- 測驗
- unit_test_main.py
- 實用程式
- db_connections.py
- 邏輯
db_connections.py
class DbConnections:
. . .
def create_pool(self, pool_name="mypool", pool_size=5):
. . .
def close(self):
. . .
class dailyspecial(DbConnections):
. . .
def dbinsert(self, create_date, data_date, country, confirm_case, confrim_death, test=""):
. . .
邏輯/main.py
import util.db_connections as daily
def get_wm():
. . .
db = daily.dailyspecial()
db.create_pool(pool_name="wm_pool", pool_size=5)
try:
. . .
for record in res_table:
. . .
db.dbinsert(. . .)
except Exception as e:
print(e)
db.close()
測驗/unit_test_main.py
import logic.main as main
class TestWorldMeter(unittest.TestCase):
@mock.patch("util.db_connections.dailyspecial.close")
@mock.patch("util.db_connections.dailyspecial.dbinsert")
@mock.patch("util.db_connections.dailyspecial.create_pool")
@mock.patch("util.db_connections.dailyspecial")
def test_get_wm(self, mock_dailyspecial, mock_create_pool, mock_insert, mock_close):
main.get_wm()
self.assertEqual(mock_dailyspecial.call_count, 1) # pass
self.assertEqual(mock_create_pool.call_count, 1) # fail, expect pass
self.assertTrue(mock_insert.call_count > 0) # fail, expect pass
self.assertEqual(mock_close.call_count, 1) # fail, expect pass
或者,我嘗試通過util.db_connections.dailyspecial僅模擬類來測驗方法。它仍然失敗了斷言。關于我的模擬程序中出了什么問題的任何想法?
替代測驗/unit_test_main.py
class TestWorldMeter(unittest.TestCase):
@mock.patch("util.db_connections.dailyspecial")
def test_get_wm(self, mock_dailyspecial):
# mock_dailyspecial().return_value = mock.MagicMock()
mock_dailyspecial.return_value = mock.MagicMock()
main.get_wm()
self.assertEqual(mock_dailyspecial.call_count, 1) # pass
self.assertEqual(mock_dailyspecial.create_pool.call_count, 1) # fail, expect pass
self.assertTrue(mock_dailyspecial.dbinsert.call_count > 0) # fail, expect pass
self.assertEqual(mock_dailyspecial.close.call_count, 1) # fail, expect pass
uj5u.com熱心網友回復:
()當試圖計算次數時,它會丟失模擬的方法被呼叫。它應該是這樣的:
self.assertEqual(mock_dailyspecial.call_count, 1)
self.assertEqual(mock_dailyspecial().create_pool.call_count, 1)
self.assertTrue(mock_dailyspecial().dbinsert.call_count > 0)
self.assertEqual(mock_dailyspecial().close.call_count, 1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/452780.html
標籤:Python python-3.x 单元测试 嘲弄 python-unittest
