使用不同的配置运行相同的测试

时间:2011-02-24 11:53:58

标签: python database unit-testing nosetests

我有一些Python代码抽象数据库及其上的业务逻辑。单元测试已经涵盖了这段代码,但现在我需要针对不同的数据库(MySQL,SQLite等)测试这段代码。

使用不同配置传递同一组测试的默认模式是什么?我的目标是确保该抽象层独立于底层数据库按预期工作。如果这可能会有所帮助,我正在使用nosetests来运行测试,但它似乎缺乏套件测试概念

最好的问候。

3 个答案:

答案 0 :(得分:1)

我喜欢在我有几个类似测试的情况下使用 test fixtures 。在Python中,在Nose下,我通常将其实现为由其他模块导入的通用测试模块。例如,我可能会使用以下文件结构:

db_fixtures.py:

import unittest

class BaseDB(unittest.TestCase):
  def testFirstOperation(self):
    self.db.query("Foo")
  def testSecondOperation(self):
    self.db.query("Blah")      

database_tests.py:

import db_fixtures

class SQliteTest(db_fixtures.BaseDB):
  def setUp(self):
    self.db = createSqliteconnection()

class MySQLTest(db_fixtures.BaseDB):
  def setUp(self):
    self.db = createMySQLconnection()

这将在MySQL和SQlite上运行BaseDB中定义的所有测试。请注意,我以不会被Nose运行的方式命名db_fixtures.py。

答案 1 :(得分:-1)

Nose支持测试套件只需导入并使用unittest.TestSuite。实际上,鼻子会愉快地运行使用标准的lib的unittest模块编写的任何tesys,因此tesys不需要以鼻子样式编写,以便由鼻子测试跑步者发现。

但是,我怀疑你需要morw而不是测试套件支持来进行你正在讨论的那种测试,但是有关你的应用程序的更多细节是必要的,以便真正解决这个问题。

答案 2 :(得分:-1)

使用--attrib插件,并在命令行中

1. nosetests -s -a 'sqlite'
2. nosetests -s -a 'mysql'