4

データベースとそのビジネスロジックを抽象化するPythonコードがいくつかあります。このコードはすでに単体テストでカバーされていますが、今度はこのコードをさまざまなDB(MySQL、SQLiteなど)に対してテストする必要があります。

異なる構成で同じ一連のテストに合格するためのデフォルトのパターンは何ですか?私の目標は、その抽象化レイヤーが、基盤となるデータベースとは無関係に期待どおりに機能することを確認することです。それが役立つ場合は、テストの実行にnosetestsを使用していますが、SuiteTestの概念が不足しているようです。

よろしくお願いします。

4

3 に答える 3

1

私は、いくつかの同様のテストがある状況でテストフィクスチャを使用するのが好きです。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に名前を付けたことに注意してください。

于 2013-03-06T01:14:17.977 に答える
-1

--attrib プラグインを使用し、コマンドラインで

1.nosetests -s -a 'sqlite'
2.nosetests -s -a 'mysql'
于 2011-06-29T02:19:13.027 に答える
-1

Nose は unittest.TestSuite をインポートして使用するだけのテスト スイートをサポートします。実際、nose は、標準の lib の unittest モジュールを使用して作成された tesys を問題なく実行するため、nos テスト ランナーによって検出されるように tesys を nos スタイルで作成する必要はありません。

ただし、あなたが話している種類のテストを行うには、テストスイートのサポートよりももっと必要だと思いますが、実際にそれに対処するには、アプリケーションに関する詳細が必要です。

于 2011-02-24T13:16:07.373 に答える