Python 在单元测试中使用pyodbc

Python 在单元测试中使用pyodbc,python,sql-server-2008,unit-testing,python-2.6,pyodbc,Python,Sql Server 2008,Unit Testing,Python 2.6,Pyodbc,我正在努力为Python编写使用Pyodbc查询本地SQL Server数据库的单元测试 下面的代码运行 import pyodbc import random import unittest from EmailSender import EmailSender class TestSequenceFunctions(unittest.TestCase): def setUp(self): self.email_sender = EmailSender()

我正在努力为Python编写使用Pyodbc查询本地SQL Server数据库的单元测试

下面的代码运行

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
第三次测试失败,并显示以下错误消息:

错误:('IM001','[IM001][unixODBC][Driver Manager]驱动程序不支持此函数(0)(SQLRowCount))

p、 美国


需要注意的是,我一开始只创建了一个email\u sender对象,但无法运行背靠背查询,因此将查询更改为相同的,当这不起作用时,添加了另一个连接和游标,这样就不会出现问题:游标的位置。

找到了解决方案-基本上问题出在(默认)拆卸方法

发生了一些事情,所以光标没有被重置-我用下面的代码覆盖了该方法,嘿,普雷斯托,它成功了:

def tearDown(self):
    """
    Make sure we reset the cursor
    """
    if self.email_sender.connection:
        self.email_sender.connection.close()
    del self.email_sender