Python mock Patch os.environ and return value
Question: Unit testing conn() using mock:

app.py

    
    
    import mysql.connector
    import os,urlparse
    
    def conn():
      if 'DATABASE_URL' in os.environ:
         url=urlparse(os.environ['DATABASE_URL'])
         g.db = mysql.connector.connect(user=url.username,password=url.password, host=url.hostname,database=url.path[1:])
      else mysql.connector.error.Errors as err:
         return "Error
    

test.py

    
    
    def test_conn(self):
     with patch(app.mysql.connector) as mock_mysql:
       with patch(app.os.environ) as mock_environ
       con()
       mock_mysql.connect.assert_callled_with("credentials")
    

Error: _Assertion_ `mock_mysql.connect.assert_called_with` is not called.

which i believe it is because 'Database_url' is not in my patched os.environ
and because of that test call is not made to mysql_mock.connect.

Questions:

1 what changes i need to make to make this test code work?

2.Do i also have to patch 'urlparse'?


Answer: 
    import mysql.connector
    import os,urlparse
    @mock.patch.dict(os.environ,{'DATABASE_URL':'mytemp'})
    def conn(mock_A):
      print os.environ["mytemp"]
      if 'DATABASE_URL' in os.environ:
         url=urlparse(os.environ['DATABASE_URL'])
         g.db = mysql.connector.connect(user=url.username,password=url.password, host=url.hostname,database=url.path[1:])
      else mysql.connector.error.Errors as err:
         return "Error
    

You can try this way.Just call `conn` with a `dummy` argument.

Or

If you dont want to modify ur original function try this:

    
    
    def func():
        print os.environ["mytemp"]
    
    def test_func():
        k=mock.patch.dict(os.environ,{'mytemp':'mytemp'})
        k.start()
        func()
        k.stop()
    
    test_func()
    

