Gin*_*ger 4 unit-testing python-3.x anaconda
我在 Anaconda 环境下使用 Python 3.3。
我想模拟 sqlite3.connect。例如在MyTests(见下文)中,我想test_sqlite3_connect返回字符串connection而不是实际sqlite3.Connection对象。
我试过修补它,但这不起作用。
from unittest.mock import patch
import unittest
import sqlite3
@patch('sqlite3.connect')
def sqlite3_connect(self,connection_string):
print('connect with : {0}'.format(connection_string))
return 'connection '
class MyTests(unittest.TestCase):
def test_sqlite3_connect(self):
print('testing connection')
dbc = DataBaseClass()
class DataBaseClass():
def __init__(self):
print('initialising database class')
self.connection = sqlite3.connect('test database')
Run Code Online (Sandbox Code Playgroud)
我设法使用快速指南部分的信息解决了这个问题
http://www.voidspace.org.uk/python/mock/
下面的代码展示了两种模拟 sqlite3.connect 的方法。
''' An example of how to mock the sqlite3.connection method '''
from unittest.mock import MagicMock,Mock
import unittest
import sqlite3
class MyTests(unittest.TestCase):
def test_sqlite3_connect_success(self):
sqlite3.connect = MagicMock(return_value='connection succeeded')
dbc = DataBaseClass()
sqlite3.connect.assert_called_with('test_database')
self.assertEqual(dbc.connection,'connection succeeded')
def test_sqlite3_connect_fail(self):
sqlite3.connect = MagicMock(return_value='connection failed')
dbc = DataBaseClass()
sqlite3.connect.assert_called_with('test_database')
self.assertEqual(dbc.connection, 'connection failed')
def test_sqlite3_connect_with_sideaffect(self):
self._setup_mock_sqlite3_connect()
dbc = DataBaseClass('good_connection_string')
self.assertTrue(dbc.connection)
sqlite3.connect.assert_called_with('good_connection_string')
dbc = DataBaseClass('bad_connection_string')
self.assertFalse(dbc.connection)
sqlite3.connect.assert_called_with('bad_connection_string')
def _setup_mock_sqlite3_connect(self):
values = {'good_connection_string':True,
'bad_connection_string':False}
def side_effect(arg):
return values[arg]
sqlite3.connect = Mock(side_effect=side_effect)
class DataBaseClass():
def __init__(self,connection_string='test_database'):
self.connection = sqlite3.connect(connection_string)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4546 次 |
| 最近记录: |