2015-07-23 24 views
10

test birimi bağl():Python sahte yama os.environ ve dönüş değeri

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") 

hatası: onaylamamock_mysql.connect.assert_called_with çağrılmaz. i 'Database_url' benim yamalı os.environ değil ve çünkü bu test çağrısının mysql_mock.connect yapılan olmadığı için öyle inanıyoruz

.

Sorular:

ne ben bu test kod çalışması için yapmanız gereken değişiklikler

1?

2.Do ben de 'urlparse' yama var?

cevap

18
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 

Bir dummy argümanla bu way.Just çağrıyı conn deneyebilirsiniz.

Ya

Eğer ur orijinal işlevi bu deneyin değiştirmek istemiyorsanız

:

def func(): 
    print os.environ["mytemp"] 

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

test_func() 
+0

Teşekkür adam, ben daha sonra ve kısa bir süre sonra benim comment.Thanks onun'çalışma çok silinir ama yöntemin yukarıda kullanarak { 'mytemp' 'mytemp'} nasıl karıştı fark – immrsteel

+0

çok teşekkürler, cevabı kabul ve ben 15 üne sahip olacaktır cevabını upvote edecektir. – immrsteel

+0

@immrsteel ur welcome :) – vks

2

Ayrıca çevre değişkenleri/set geri yüklemek için bu question tarif modified_environ bağlam yöneticisi gibi bir şey kullanabilirsiniz. os.environ geçirilen alma:

with modified_environ(DATABASE_URL='mytemp'): 
    func()