使用模拟进行单元测试conn():
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:
        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")
错误:未调用断言mock_mysql.connect.assert_called_with
我认为这是因为'Database_url'不在我打补丁的os.environ中,并且因为没有对mysql_mock.connect进行该测试调用。
问题:
1为了使此测试代码有效,我需要进行哪些更改?
2.我还必须修补'urlparse'吗?

最佳答案

您可以尝试此解决方案。只需使用conn参数调用dummy即可:

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:
        return "Error"
或者,如果您不想修改原始功能,请尝试以下解决方案:
def func():
    print os.environ["mytemp"]


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


test_func()

关于python - Python模拟补丁os.environ并返回值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31582750/

10-09 01:41