python: mock a module

后端 未结 4 1089
故里飘歌
故里飘歌 2020-12-03 11:09

Is it possible to mock a module in python using unittest.mock? I have a module named config, while running tests I want to mock it by another modul

4条回答
  •  情深已故
    2020-12-03 11:40

    Consider this following setup

    configuration.py:

    import os
    
    class Config(object):
        CONF_VAR1 = "VAR1"
        CONF_VAR2 = "VAR2"
    
    class TestConfig(object):
        CONF_VAR1 = "test_VAR1"
        CONF_VAR2 = "test_VAR2"
    
    
    if os.getenv("TEST"):
        config = TestConfig
    else:
        config = Config
    

    now everywhere else in your code you can use:

    from configuration import config
    print config.CONF_VAR1, config.CONF_VAR2
    

    And when you want to mock your coniguration file just set the environment variable "TEST".

    Extra credit: If you have lots of configuration variables that are shared between your testing and non-testing code, then you can derive TestConfig from Config and simply overwrite the variables that need changing:

    class Config(object):
        CONF_VAR1 = "VAR1"
        CONF_VAR2 = "VAR2"
        CONF_VAR3 = "VAR3"
    
    class TestConfig(Config):
        CONF_VAR2 = "test_VAR2"
        # CONF_VAR1, CONF_VAR3 remain unchanged
    

提交回复
热议问题