gpt4 book ai didi

python - 将模拟对象添加到 sqlalchemy 集合中会引发异常

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:27 26 4
gpt4 key购买 nike

我正在为具有一对多关系的 SQLAlchemy 模型类编写单元测试,但无法将模拟对象添加到集合中。

被测类:

class PCLRun(Base):
__tablename__ = 'pcl_runs'
id = Column(Integer, primary_key=True)
...
files = relationship("PCLOutputFile", backref='pcl_run')

class PCLOutputFile(Base):
__tablename__ = 'pcl_output_files'
id = Column(Integer, primary_key=True)
...
pcl_run_id = Column(Integer, ForeignKey('pcl_runs.id'))

测试代码:

class PCLRunTests(unittest.TestCase):
def test_foo(self):
file_mock = mock.Mock()
pcl_run = PCLRun()
pcl_run.files.append(file_mock)
...

附加模拟对象会引发异常:

TypeError: 'Mock' object has no attribute '__getitem__'

有没有办法通过向其中添加模拟来对包含关系的类进行单元测试,同时保持集合的行为像一个简单的列表?

我正在使用 mock 1.0.1 和 sqlalchemy 0.8.2。

最佳答案

我认为问题在于 PCLRun 实例需要 PCLOutputFile 类的实例作为 append 方法的参数。您的 Mock 实例没有任何相同的属性,因此当它尝试 __getitem__ 方法时会引发错误。

您可以尝试利用 Python 对 duck-typing 的使用来创建一个具有 PCLOutputFile 文件所有属性的 Mock 对象,但这可能会很困难,具体取决于如何许多继承的元数据超出了查询所需的列值。

或者,您可以定义设置/拆卸方法/装置,这将在您的测试表中创建 PCLOutputFile 类的真实 实例。 nosetest模块提供tools对于这种类型的测试模式。

关于python - 将模拟对象添加到 sqlalchemy 集合中会引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25381708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com