2013-09-04 1 views
1

Pyodbc를 사용하여 로컬 SQL Server 데이터베이스를 쿼리하는 Python의 단위 테스트를 작성하는 데 어려움을 겪고 있습니다.단위 테스트에서 pyodbc 사용

다음 코드를 실행 ... 그러나

import pyodbc 
import random 
import unittest 
from EmailSender import EmailSender 

class TestSequenceFunctions(unittest.TestCase): 

    def setUp(self): 
     self.email_sender = EmailSender() 
     self.other_email_sender = EmailSender() 

    def test_for_initialisation_variables(self): 
     """ 
     Tests to check that the object is created properly 
     """ 
     self.assertTrue(self.email_sender.server) 
     self.assertTrue(self.email_sender.errorLogFile) 
     self.assertTrue(self.email_sender.connection) 
     self.assertTrue(self.email_sender.cursor) 
     self.assertTrue(self.email_sender.siteAuth) 
     self.assertTrue(self.email_sender.apiCallsLimitPerRun) 

    def test_SQL_Server_Connection(self): 
     for value in self.email_sender.cursor.execute("select * from sys.tables"):. 
      print value 

, 내가 코드에 두 번째, 거의 동일한 테스트를 추가 할 때 ... 세 번째 시험은 다음과 같은 오류와 함께 실패

import pyodbc 
import random 
import unittest 
from EmailSender import EmailSender 

class TestSequenceFunctions(unittest.TestCase): 

    def setUp(self): 
     self.email_sender = EmailSender() 
     self.other_email_sender = EmailSender() 

    def test_for_initialisation_variables(self): 
     """ 
     Tests to check that the object is created properly 
     """ 
     self.assertTrue(self.email_sender.server) 
     self.assertTrue(self.email_sender.errorLogFile) 
     self.assertTrue(self.email_sender.connection) 
     self.assertTrue(self.email_sender.cursor) 
     self.assertTrue(self.email_sender.siteAuth) 
     self.assertTrue(self.email_sender.apiCallsLimitPerRun) 

    def test_SQL_Server_Connection(self): 
     for value in self.email_sender.cursor.execute("select * from sys.tables"):. 
      print value 

    def test_getSites_method(self): 
     for value in self.other_email_sender.cursor.execute("select * from sys.tables"):. 
      print value 

메시지 :

Error: ('IM001', '[IM001] [unixODBC][Driver Manager]Driver does not support this function (0) (SQLRowCount)')

ps

작성한 email_sender 개체 하나만 만들었지 만 처음부터 다시 실행할 수 없으므로 쿼리가 동일하게 변경되고 작동하지 않을 때 다른 연결과 커서가 추가되었습니다. 아무런 문제가 될 수 없다 : 커서가있는 위치.

답변

1

해결책을 찾았습니다. 기본적으로 문제는 (기본) tearDown 메소드에있었습니다.

def tearDown(self): 
    """ 
    Make sure we reset the cursor 
    """ 
    if self.email_sender.connection: 
     self.email_sender.connection.close() 
    del self.email_sender 
: 나는 아래로 메소드를 오버라이드와 헤이 프레스토, 그것은 일 -

뭔가 너무 커서되지 않는 한 리셋을 무슨 일이 있었