как смоделировать базу данных Python Postgres - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь смоделировать свою базу данных, но когда я проверяю ее, результатом является None.

try:
    con = psycopg2.connect(
                    host="yhvh",
                    database="python_db",
                    user="postgres",
                    password="pass",
                    )
except:
    print("Unable to connect database")

# Open a cursor to perform database operation
cur = con.cursor()

def read(con):
    """
    Read data in Database
    """
    print("Read")

    # execute the query
    data ="SELECT id, name FROM employees"
    cur.execute(
        data
    )
    # fetchall - returns all entries
    rows = cur.fetchall()

    for r in rows:
        print(f"id {r[0]} name {r[1]}")

это код для моего тестирования

    def test_read(self):

        expected = [9, 'aaa']

        with patch('psycopg2.connect') as mock_connect:
            mock_con_cm = mock_connect.return_value
            mock_con = mock_con_cm.__enter__.return_value
            mock_cur = mock_con.cursor.return_value
            mock_cur.fetchall.return_value = expected

            result = db.read(mock_connect)
            self.assertEqual(expected, result)

Я получаю assertionError: [9, 'aaa']! = Нет

Как результат, имеющий значение, равное результату, равен ожидаемому?

1 Ответ

0 голосов
/ 10 июля 2019

Сначала вам нужно вернуть rows, который содержит список данных из функции read, если нет, то он вернет None.Затем используйте assertListEqual(expected, result), чтобы проверить элементы в списке.

Ваш окончательный код будет выглядеть следующим образом.

def read(con):
    """
    Read data in Database
    """
    print("Read")

    # execute the query
    data ="SELECT id, name FROM employees"
    cur.execute(
        data
    )
    # fetchall - returns all entries
    rows = cur.fetchall()

    for r in rows:
        print(f"id {r[0]} name {r[1]}")

    return rows

И утверждение должно быть,

self.assertListEqual(expected, result)
...