简体   繁体   中英

python mocking check if a method of an object was accessed(not called)

class A():
    def tmp(self):
        print("hi")

def b(a):
    a.tmp # note that a.tmp() is not being called. In the project I am working on, a.tmp is being passed as a lambda to a spark executor. And as a.tmp is being invoked in an executor(which is a different process), I can't assert the call of tmp

I want to test whether a.tmp was ever invoked. How do I do that? Note that I still don't want to mock away the tmp() method and would prefer something on the lines of python check if a method is called without mocking it away

Not tested, and there's probably a much better way with Mock but anyway:

def mygetattr(self, name):
    if name == "tmp":
        self._tmp_was_accessed = True
    return super(A, self).__getattribute__(name)

real_getattr = A.__getattribute__
A.__getattribute__ = mygetattr
try:
    a = A()
    a._tmp_was_accessed = False
    b(a)
finally:
    A.__getattribute__  real_getattr
print(a._tmp_was_accessed)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM