0

これはおそらく非常に簡単ですが、それでもsqlalchemyを取得しており、答えを見つけることができないようです。私は基本的なモジュールsometable.pyを持っています

import config
class SomeTable(config.Base):
    __tablename__ = 'bla'
    def __init__(self, name):
        self.name = name

ここで、このモジュールでテストを作成します。基本的に、いくつかのテスト行を追加し、SomeTableの他の関数を使用して計算を行い、結果を確認します。しかし、メインデータベースでこれらの操作を行いたくありません。sometableモジュールで定義されたクラスに別のBaseオブジェクトを渡すにはどうすればよいですか?それとも、これを達成するためのより良い方法はありますか?

たとえば、私のtest_sometable.pyは現在次のようになっています。

import sometable, config
class TestSomeTable(unittest.TestCase):

    def setUp(self):
        engine = create_engine('sqlite:///:memory:')
        self.Base = declarative_base(config.Base.metadata, engine)

    def test_some_functionality(self):
        tbl = sometable.SomeTable('name1')
        # if i create a session and add a row here, 
        # it will add it to my main database, rather than the in-memory one
4

1 に答える 1

1

SomeTableをベースとして使用するため、テスト クラスでconfig.Basenew を定義しても問題ありません。Baseあなたの実体は、それが別の基地であるべきであることをどのように知ることになっていますか?

最初にインポートしてから、使用したいベースにconfig置き換え、そのインポート後にのみ動作するはずだと思います。それ以外の場合は、単体テストを実行するときに、運用構成の代わりにテスト構成を使用する別の方法を見つける必要があります。config.Basesometable

于 2012-05-10T23:12:12.523 に答える