Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite 当我在单元测试中使用带有SqlAlchemy的Fixture时,为什么我不能在测试期间确认对数据库的更改?_Sqlite_Sqlalchemy_Functional Testing_Fixture - Fatal编程技术网

Sqlite 当我在单元测试中使用带有SqlAlchemy的Fixture时,为什么我不能在测试期间确认对数据库的更改?

Sqlite 当我在单元测试中使用带有SqlAlchemy的Fixture时,为什么我不能在测试期间确认对数据库的更改?,sqlite,sqlalchemy,functional-testing,fixture,Sqlite,Sqlalchemy,Functional Testing,Fixture,我正在测试一个使用SqlAlchemy(v0.7.4)的消息处理器。在我的测试中,我使用Sqlite来建立和拆除一个临时数据库。我的夹具数据包括一个文件表,其中包含一个状态字段,该字段应在处理器运行时更新 我已经确认测试、正在测试的处理器和夹具都共享同一个数据库会话 我在处理器运行之前和之后查询文件记录上的状态字段。值应该更改(从表示“处理”的int改为“完成”)。我在处理器中添加了调试代码,以验证该字段是否使用正确的新状态值进行了更新。我还能够通过检查处理器生成的输出文件的内容来独立验证处理器

我正在测试一个使用SqlAlchemy(v0.7.4)的消息处理器。在我的测试中,我使用Sqlite来建立和拆除一个临时数据库。我的夹具数据包括一个文件表,其中包含一个状态字段,该字段应在处理器运行时更新

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

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


我已尝试在最终状态查询之前显式提交和刷新会话。什么都不管用。有什么想法吗?

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

因此,尽管我黑客攻击了processor类,使其使用与测试本身相同的数据库会话,但由于处理器和数据库位于不同的内存空间中,因此试图验证结果的测试代码看不到处理器正在进行的数据库更新

解决方案:设置临时Sqlite数据库。


此外,我还发现,当Fixture进行拆卸时,如果您的Fixture数据与安装时的状态不同,它将抛出一个错误(请参见本章末尾的说明)。但这是一个单独的问题。

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

因此,尽管我黑客攻击了processor类,使其使用与测试本身相同的数据库会话,但由于处理器和数据库位于不同的内存空间中,因此试图验证结果的测试代码看不到处理器正在进行的数据库更新

解决方案:设置临时Sqlite数据库。


此外,我还发现,当Fixture进行拆卸时,如果您的Fixture数据与安装时的状态不同,它将抛出一个错误(请参见本章末尾的说明)。但那是另一个问题。

我发现了这个问题。正在测试的脚本正在派生一个新的子进程,其中正在进行数据库更新。Sqlite数据库正在内存中设置,因此测试数据库会话和处理器会话位于单独的内存空间中。解决方案是在文件中而不是在内存中设置临时Sqlite数据库。同上。如果内存存储是可能的话会更好。这样测试应该运行得更快。我发现了这个问题。正在测试的脚本正在派生一个新的子进程,其中正在进行数据库更新。Sqlite数据库正在内存中设置,因此测试数据库会话和处理器会话位于单独的内存空间中。解决方案是在文件中而不是在内存中设置临时Sqlite数据库。同上。如果内存存储是可能的话会更好。这样测试应该运行得更快。