这可能非常简单,但仍然拿起sqlalchemy,似乎无法找到答案。我有一个基本模块sometable.py
import config
class SomeTable(config.Base):
__tablename__ = 'bla'
def __init__(self, name):
self.name = name
现在,我想在这个模块上编写测试:基本上添加几个测试行,使用SomeTable的其他函数进行一些计算,并检查结果。但我不想在我的主数据库中进行这些操作。如何将不同的Base对象传递给sometable模块中定义的类?或者有更好的方法来实现这一目标吗?
e.g。我的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
答案 0 :(得分:1)
SomeTable
使用config.Base
作为基础,在测试类中定义新的Base
并不重要。您的实体如何知道它应该是另一个基础?
我认为如果您首先导入config
,然后将config.Base
替换为您要使用的基础,并且仅在导入sometable
之后,它应该有效。否则,在运行单元测试时,您必须找到另一种方法来使用测试配置而不是生产配置。