Издевательство только над одной функцией классаPython

Программы на Python
Ответить
Anonymous
 Издевательство только над одной функцией класса

Сообщение Anonymous »

Я хотел бы написать модульный тест, который сможет обеспечить схематическую корректность оператора SQL при вызове функции. Он должен проверить выполнение этого вызова. Затем я хотел бы имитировать вызов фиксации, чтобы не происходило никаких вставок в базу данных. Я использую psycopg2 для своих тестов.

У меня есть такая функция:

Код: Выделить всё

def test_insert(a, b, c):
con = psycopg2.connect(os.environ['PGDB'])
cur = con.cursor()
cur.execute('insert into test_table values ({a}, {b}, {c})'.format(a=a, b=b, c=c))
con.commit()
con.close()
при вызове test_insert(1,2,3) я вижу строку, вставленную в таблицу. Теперь я пытаюсь издеваться над звонком. На данный момент я использовал несколько подходов:

Код: Выделить всё

@mock.patch('psycopg2.connect')
def test(mock_connect, a, b, c):
mock_con = mock_connect.return_value
mock_con.commit.return_value = None
insert_row(a, b, c)
Кажется, это работает, но на самом деле не вызывает оператор выполнения. Например, test_insert(1,4,'xyz') завершается с ошибкой, а test(1,4,'xyz') - нет. Далее я попытался имитировать только метод фиксации класса соединения в psycopg2:

Код: Выделить всё

@mock.patch('psycopg2.extensions.connection.commit')
def test_insert(mock_commit, a, b, c):
mock_commit.return_value = None
insert_row(a,b,c)
но это выдает синтаксическую ошибку

Код: Выделить всё

Traceback (most recent call last):
File "", line 1, in 
File "/home/a/.virtualenv/test/lib/python2.7/site-packages/mock/mock.py", line 1318, in patched
patching.__exit__(*exc_info)
File "/home/a/.virtualenv/test/lib/python2.7/site-packages/mock/mock.py", line 1480, in __exit__
setattr(self.target, self.attribute, self.temp_original)
TypeError: can't set attributes of built-in/extension type 'psycopg2.extensions.connection'
Есть ли хороший способ сделать то, что я пытаюсь сделать?

Подробнее здесь: https://stackoverflow.com/questions/432 ... of-a-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»