2015-07-23 11 views
10

Đơn vị kiểm tra conn() sử dụng mô hình:Python patch giả os.environ và giá trị trả

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

Lỗi: Assertionmock_mysql.connect.assert_called_with không được gọi.

mà tôi tin rằng đó là vì 'Database_url' không nằm trong os.environ được vá của tôi và vì cuộc gọi thử nghiệm đó không được thực hiện cho mysql_mock.connect.

Câu hỏi:

1 những thay đổi nào tôi cần thực hiện để làm cho mã kiểm tra này hoạt động?

2.Tôi có phải vá 'urlparse' không?

Trả lời

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 

Bạn có thể thử cách này.Chỉ cần gọi conn với đối số dummy.

Hoặc

Nếu bạn không muốn thay đổi chức năng ban đầu ur thử điều này:

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

Cảm ơn người đàn ông, tôi nhận ra nó sau này và chẳng bao lâu sau khi xóa comment.Thanks tôi rất nhiều nó đang làm việc nhưng tôi bối rối rằng việc sử dụng phương pháp nêu trên như thế nào { 'mytemp': 'mytemp'} nhận được thông qua vào os.environ – immrsteel

+0

Cảm ơn rất nhiều, tôi đã chấp nhận câu trả lời và sẽ upvote câu trả lời khi tôi sẽ có 15 danh tiếng. – immrsteel

+0

@immrsteel ur welcome :) – vks

2

Bạn cũng có thể sử dụng giống như người quản lý modified_environ bối cảnh mô tả trong question này để thiết lập/khôi phục các biến môi trường.

with modified_environ(DATABASE_URL='mytemp'): 
    func() 
Các vấn đề liên quan