dst*_*arh 2 java junit spring hibernate jpa
这样设置JUNIT测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "/applicationContext.xml", "/applicationContext-security.xml" })
@TransactionConfiguration(defaultRollback = true)
@Transactional
public class BlahIntegrationTests{
@Test
public void testMappingsOfHugeObjectGraph(){
}
}
Run Code Online (Sandbox Code Playgroud)
我试图测试我的休眠映射(基于注释的驱动和基于JPA的)是正确的,并且在运行时如上述测试通过(只是断言一个ID已创建)。
如果我@Transactional走开了,我的某些关系会出现错误,这是我所期望的。有人想过为什么它不会失败@Transactional吗?
编辑:为澄清起见,在保存对象时引发的异常是关于错误的休眠映射(这是一个非常大的对象结构,我已经厌倦了其中的一些对象)
如果删除@Transactional,则测试数据库将不会为另一个测试所用,因此不会隔离测试。
如果有,那里的某些测试可能会通过,即使它们失败了(如您所描述的,或者另一个示例是,如果您插入的实体重复了一些唯一的约束)。
解决方案是在其位置添加@Transactional并注入
@PersistenceContext
private EntityManager em;
Run Code Online (Sandbox Code Playgroud)
从数据库中提取数据之前,请执行以下操作
em.flush();
em.clear();
Run Code Online (Sandbox Code Playgroud)
第一行将导致会话和数据库之间的同步(您的提供程序通常等待到事务结束)。第二行将从会话中删除所有实体,因此所有查询都将进入数据库。
在测试之后,所有内容仍会回滚,因此您的数据库处于原始状态。
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
1618 次 |
| 最近记录: |