If the if LOGGING_ACTIVATED:
test happens at the module level, you need to make sure that that module is not yet imported first. Module-level code runs just once (the first time the module is imported anywhere), you cannot test code that won't run again.
If the test is in a function, note that the global name used is LOGGING_ACTIVATED
, not config.LOGGING_ACTIVATED
. As such you need to patch out main.LOGGING_ACTIVATED
here:
@patch("main.LOGGING_ACTIVATED", True)
as that's the actual reference you wanted to replace.
Also see the Where to patch section of the mock
documentation.
You should consider refactoring module-level code to something more testable. Although you can force a reload of module code by deleting the module object from the sys.modules
mapping, it is plain cleaner to move code you want to be testable into a function.
So if your code now looks something like this:
if LOGGING_ACTIVATED:
amqp_connector = Connector()
consider using a function instead:
def main():
global amqp_connector
if LOGGING_ACTIVATED:
amqp_connector = Connector()
main()
or produce an object with attributes even.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…