一連の連鎖呼び出しがあり、それぞれが新しいオブジェクトを返します。あなたがのための参照を握るので
@mock.patch("psycopg2.connect")
def test_super_awesome_stuff(self, mock_connect):
expected = [['fake', 'row', 1], ['fake', 'row' 2]]
mock_con = mock_connect.return_value # result of psycopg2.connect(**connection_stuff)
mock_cur = mock_con.cursor.return_value # result of con.cursor(cursor_factory=DictCursor)
mock_cur.fetchall.return_value = expected # return this when calling cur.fetchall()
result = super_cool_method()
self.assertEqual(result, expected)
:あなたはだけpsycopg2.connect()
コールを模擬した場合は、このような呼び出しのために返されたモックを参照.return_value
属性を経由して通話の鎖(それぞれがモックオブジェクトを生成する)に従うことができます彼らは正しく呼び出された場合にはモックconnect
機能だけでなく、モック接続とカーソルを使用すると、その後も主張できるオブジェクト:あなたはこれらをテストする必要がない場合
mock_connect.assert_called_with(**connection_stuff)
mock_con.cursor.called_with(cursor_factory=DictCursor)
mock_cur.execute.called_with("Super duper SQL query")
、あなただけにreturn_value
参照をチェーンにできました真っ直ぐ進んで下さい接続のオブジェクトのcursor()
の結果に:
@mock.patch("psycopg2.connect")
def test_super_awesome_stuff(self, mock_connect):
expected = [['fake', 'row', 1], ['fake', 'row' 2]]
mock_connect.return_value.cursor.return_value.fetchall.return_value = expected
result = super_cool_method()
self.assertEqual(result, expected)
これは私のために働いていません。 fetchallから返った結果は、 '' –
@AllenLinです。ちょうど '実行する'。 – chepner
cursor.executeは通常Noneを返します。なぜあなたは実行のための戻り値を設定しますが、フェッチしないのですか? –