Magic mock assert_called_once vs assert_called_once_with weird behaviour

旧街凉风 提交于 2019-12-10 15:45:09

问题


I am noticing a weird behavior with assert_called_once and assert_called_once_with in python. This is my real simple test:

File module/a.py

from .b import B

class A(object):
    def __init__(self):
        self.b = B("hi")

    def call_b_hello(self):
        print(self.b.hello())

File module/b.py

class B(object):
    def __init__(self, string):
        print("created B")
        self.string = string;

    def hello(self):
        return self.string

These are my tests:

import unittest
from mock import patch
from module.a import A    

class MCVETests(unittest.TestCase):
    @patch('module.a.B')   
    def testAcallBwithMockPassCorrect(self, b1):
        a = A()
        b1.assert_called_once_with("hi")
        a.call_b_hello()
        a.b.hello.assert_called_once()

    @patch('module.a.B')
    def testAcallBwithMockPassCorrectWith(self, b1):
        a = A()
        b1.assert_called_once_with("hi")
        a.call_b_hello()
        a.b.hello.assert_called_once_with()

    @patch('module.a.B')
    def testAcallBwithMockFailCorrectWith(self, b1):
        a = A()
        b1.assert_called_once_with("hi")
        a.b.hello.assert_called_once_with()

    @patch('module.a.B')
    def testAcallBwithMockPassWrong(self, b1):
        a = A()
        b1.assert_called_once_with("hi")
        a.b.hello.assert_called_once()

if __name__ == '__main__':
    unittest.main()

My problem as stated in the name of the function is:

  • Test 1 passes correctly
  • Test 2 passes correctly
  • Test 3 fails correctly (I've removed the call to b)
  • Test 4 passes I am not sure why.

Am I doing something wrong? I am not sure but reading the documentation docs python:

assert_called_once(*args, **kwargs)

Assert that the mock was called exactly once.


回答1:


This is old, but for others landing here...

assert_called_once isn't a thing and so you're actually making a mocked function call which doesn't error

Please see: http://engineroom.trackmaven.com/blog/mocking-mistakes/

You can check the call count instead



来源:https://stackoverflow.com/questions/42297549/magic-mock-assert-called-once-vs-assert-called-once-with-weird-behaviour

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!