python - 在单元测试中使用 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()
        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][驱动程序管理器]驱动程序不支持此功能 (0) (SQLRowCount)')

附注

请注意,我一开始只创建了一个 email_sender 对象,但无法连续运行查询,因此将查询更改为相同,当这不起作用时,添加了另一个连接和光标,以便可以没有问题:光标的位置。

最佳答案

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

发生了一些事情,所以光标没有被重置 - 我用下面的方法覆盖了该方法,嘿,很快,它起作用了:

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

关于python - 在单元测试中使用 pyodbc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18615265/

相关文章:

python - 字典中的类 - Django 模板

python - 无法使用自签名 SSL 证书执行对 URL 的请求

python - 如何将文本文件导入为字符数组

python - pandas 和列表理解的速度问题

c# - 无法添加基于服务的数据库

Java休息服务器: make a unit test

sql-server - 如何解决 SQL Server 2008 中的跨语言安装问题?

sql - FAST_FORWARD 游标何时会有工作表(这是要避免的事情)?

unit-testing - 如何测试使用 session 参数的 JSF bean 方法?

c++ - boost 测试预期 throw