0

我正在测试一个使用 SqlAlchemy (v0.7.4) 的消息处理器。在我的测试中,我使用带有 Sqlite 的Fixture (v1.4)来设置和拆除一个临时数据库。我的夹具数据包括一个带有状态字段的文件表,当处理器运行时该字段应该得到更新。

我已经确认测试、被测试的处理器和夹具都共享同一个数据库会话。

我在处理器运行之前和之后查询文件记录上的状态字段。该值应更改(从表示“正在处理”的 int 到“完成”)。我在处理器中添加了调试代码,以验证该字段是否正在使用正确的新状态值进行更新。我还能够通过检查它生成的输出文件的内容来独立验证处理器是否成功运行。但是,当我使用测试的数据库会话在测试结束时查询状态时,它始终与开始时的值相同。

我已经尝试在最终状态查询之前明确提交和刷新会话。没有任何效果。有任何想法吗?

4

1 回答 1

3

这里的问题是双重的:1)我的测试是在内存中使用一个临时的 Sqlite 数据库。2)在我的功能测试中,处理器是在一个新进程中生成的。

因此,即使我已经破解了处理器类以使用与测试本身相同的数据库会话,但由于处理器和数据库位于不同的内存空间中,处理器正在进行的数据库更新对于试图验证结果的测试代码是不可见的。

解决方案:设置临时 Sqlite 数据库in-file 而不是 in-memory

此外,我发现,当 Fixture 进行拆卸时,如果您的夹具数据与设置时的状态不同(在本节末尾注明),它将引发错误。但那是一个单独的问题。

于 2012-04-04T15:34:17.497 回答