[python] 斷言一個函數/方法不是使用Mock調用的


1 Answers

雖然是一個老問題,但我想補充一點,目前mock庫( assert_not_called backport)支持assert_not_called方法。

只是升級你的;

pip install mock --upgrade

Question

我正在使用模擬庫來測試我的應用程序,但我想斷言某些函數未被調用。 模擬文檔討論像mock.assert_called_withmock.assert_called_once_with這樣的方法,但是我沒有找到類似mock.assert_not_called或者與驗證mock 沒有關聯的東西。

我可以像下面這樣做,儘管它看起來並不酷,也沒有pythonic:

def test_something:
    # some actions
    with patch('something') as my_var:
        try:
            # args are not important. func should never be called in this test
            my_var.assert_called_with(some, args)
        except AssertionError:
            pass  # this error being raised means it's ok
    # other stuff

任何想法如何做到這一點?

謝謝你的幫助 :)




當你使用類繼承unittest.TestCase測試時,你可以簡單地使用如下方法:

  • assertTrue
  • assertFalse
  • assertEqual便

和類似的(在python文檔中你可以找到剩下的)。

在你的例子中,我們可以簡單地斷言mock_method.called屬性是否為False ,這意味著該方法未被調用。

import unittest
from unittest import mock

import my_module

class A(unittest.TestCase):
    def setUp(self):
        self.message = "Method should not be called. Called {times} times!"

    @mock.patch("my_module.method_to_mock")
    def test(self, mock_method):
        my_module.method_to_mock()

        self.assertFalse(mock_method.called,
                         self.message.format(times=mock_method.call_count))



Related