코드에있는 메소드를 테스트 할 때 데이터베이스 호출을 스태핑하고 싶습니다. 내가하고 싶은 것은 가치를 돌려 주지만 나는 그걸 멀리 할 수는없는 것 같습니다.Python Mock UnitTest 및 Database
def loadSummary(appModel):
stmt = 'Select * from Table'
for row in appModel.session.query(*t.columnNames()).from_statement(stmt).all():
t.append(row)
return t
def test_loadSummary(self):
appModel = Mock()
query = appModel.session.query.return_value
query.from_statment.return_value = ['test1', 'test2']
expected = loadSummary(appModel)
나는 다음과 같은 오류를 얻을
for row in appModel.session.query(*t.columnNames()).from_statement(stmt).all():
TypeError: 'Mock' object is not iterable
그래서 그는 전혀 심지어 쉘 문제없이 작동하지만 메소드로 전달 가져 오지처럼.
>>> appModel.session.query('').from_statment('stmt')
['test1', 'test2']
그때 mock.patch.object 사용하여 시도
class MockAppContoller(object):
def from_from_statement(self, stmt):
return ['test1', 'test2']
def test_loadSummary(self):
with mock.patch.object(loadSummary, 'appModel') as mock_appModel:
mock_appModel.return_value = MockAppContoller()
I 얻을
2014-04-09 13:20:53,276 root ERROR Code failed with error:
<function loadSummary at 0x0D814AF0> does not have the attribute 'appModel'
가 어떻게이 문제를 해결 얻을 수있는 다음과 같은 오류?
그것은'sqlalchemy' 사용하고있다 모의 사용하는 등 그와 같은 깔끔한하지, 그렇지? – alecxe
예. 나는 SQLAlchemy – Eamonn