Unit testing 如果单元测试执行了数据库插入/更新/删除,如何在Play Framework中进行检查

Unit testing 如果单元测试执行了数据库插入/更新/删除,如何在Play Framework中进行检查,unit-testing,playframework,h2,playframework-2.2,Unit Testing,Playframework,H2,Playframework 2.2,我有一个基类,我所有的控制器测试都扩展了它。这是为了使每个单元测试都有自己的夹具进行加载而设置的 因此@Before覆盖将检查测试所需的夹具,加载它,然后开始测试 这里的问题是每次都会重新加载夹具。即使该方法只对数据库进行了一次选择,也不会改变任何内容 Play框架使用的内存数据库是H2数据库。我想知道是否有一种方法可以在单元测试完成后进行检查,数据库是否有更改,如果没有,则跳过完全相同的数据的重新加载 我尝试了identity\u scope,无论发生什么,它都返回null。H2无法检查上次应

我有一个基类,我所有的控制器测试都扩展了它。这是为了使每个单元测试都有自己的夹具进行加载而设置的

因此@Before覆盖将检查测试所需的夹具,加载它,然后开始测试

这里的问题是每次都会重新加载夹具。即使该方法只对数据库进行了一次选择,也不会改变任何内容

Play框架使用的内存数据库是H2数据库。我想知道是否有一种方法可以在单元测试完成后进行检查,数据库是否有更改,如果没有,则跳过完全相同的数据的重新加载


我尝试了identity\u scope,无论发生什么,它都返回null。

H2无法检查上次应用更改的时间。 但是,您可以只制作一个附加列,以节省最后一次修改时间

CREATE TABLE TEST(ID INT, NAME VARCHAR, LAST_MOD TIMESTAMP AS NOW());
这样,您可以节省测试开始的时间,然后查询DB是否在测试开始时间之后有任何修改日期


我看不到任何其他可能的方法

我不知道是否有可能仅使用Junit实现这一点,但有一种工具可以让您轻松管理这些加载。它的dbunit,您可以轻松地在游戏中使用它。据我所知,Junit的主要目的是将测试彼此分离。但我并不是说这是不可能的,也许你可以尝试使用@BeforeClass并结合测试套件。我查了一下,看起来我必须重构所有现有的单元测试。谢谢你的建议,但是我不能把时间放进去。你考虑过从内存数据库到实际物理数据库的变化吗?嗯,这是我猜的最好的想法,但是我会花很多时间来确保这些单元在单元测试运行时自动存在,当插入发生时自动填充。这提醒了我:删除怎么办?如何跟踪已发生的删除?对于我发布的查询,它将在任何修改时自动将时间戳更改为实际时间,因为每次更改记录时,AS NOW()都会执行。在测试上创建额外的字段不是一个好主意,但我认为额外的列不会对整个程序产生太大的影响。即使只是为了测试的目的。但是,在一个测试中删除一行,然后在下一个测试中预期它会在那里,这会怎么样呢?不过,这只有在我知道要测试哪个表时才有效。我真正需要的是一种检测整个数据库中是否有任何表被修改的方法。我想这是不可能的