0

这可能非常简单,但仍然使用 sqlalchemy 并且似乎找不到答案。我有一个基本模块 sometable.py

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

现在,我想在这个模块上写一个测试:基本上添加几个测试行,使用 SomeTable 的其他函数进行一些计算,然后检查结果。但我不想在我的主数据库中进行这些操作。如何将不同的 Base 对象传递给 sometable 模块中定义的类?还是有更好的方法来实现这一目标?

例如,我的 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.Base定义一个新的并不重要。Base你的实体应该如何知道它应该是另一个基地?

我认为如果你首先导入它应该可以工作config,然后用config.Base你想要使用的基础替换,并且只有在导入之后sometable。否则,在运行单元测试时,您必须找到另一种方法来使用测试配置而不是生产配置。

于 2012-05-10T23:12:12.523 回答