これはおそらく非常に簡単ですが、依然としてsqlalchemyを取り上げているため、答えが見つからないようです。私は、基本モジュールのsometable.pysqlalchemy:同じクラスの複数のベース
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
現在、エンティティは私が定義した新しいベースを使用する方法がありません。これは、正確に私が探しているコードのビットです。 テストを実行するために別の設定を使用することは悪い考えではありませんが、同じオブジェクトの複数のインスタンスが異なるデータベースを指しているという自然な方法があると思います。 – ludaavics
は、config.TestBaseと同様にconfig.TESTフラグを追加することになりました。実際のファイルには 、config.TESTはfalseに設定されています。 私のテストのsetUp()に、私はconfig.TESTをTrueに設定し、sometableモジュールをリロードします。 tearDown()では、config.TESTをfalseに、TestBaseをNoneに戻しました。 – ludaavics