2013-03-19 183 views
1

我的应用程序使用JPA(1.2),Spring(3.1.2),Spring Data(1.1.0)和Hibernate(4.1.7)。JPA测试框架

我们需要编写用于测试Entity和Repository的Junit测试用例,但是我们无法找到适用于测试JPA所有场景的Junit和framwork的正确示例。

请让我们知道为Junit编写JPA存储库和实体的框架是否正确。

+2

JPA1.2不存在。 1.0? 2.0? 2.1? – DataNucleus 2013-03-19 12:53:09

回答

0

我会推荐使用Spring Test框架,它使开发人员能够用测试引导依赖注入容器。然后,您可以将您的存储库自动装入测试。

这里是我已经使用了框架,摘录测试:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"classpath:META-INF/spring/test-context.xml"}) 
@TransactionConfiguration(defaultRollback=false) 
public class CommentRepositoryTest { 

    @Autowired 
    private CommentRepository repository; 

    @Autowired 
    PostRepository postRepository; 

    @Test 
    public void findOneTest(){ 
     Comment comment= repository.findOne(1); 
     assertNotNull(comment); 
     assertEquals("John Doe", comment.getAuthor()); 
    } 

} 

通知的@ContextConfiguration指向的Spring Bean配置文件如何。那是依赖注入容器被引导。 @Autowired注释正在注入我的存储库进行测试。 @TransactionConfiguration告诉Spring不要回滚测试,以便可以针对沙箱数据库运行单元测试,这可能会暴露回滚功能隐藏的问题。

我有一个项目,演示GitHub上的配置。

我还创建了一个视频教程,演示如何configure jUnit tests with Spring Test

我也有一个test使用@Transactional注释的例子。

+0

每个测试函数都有自己的事务,所以我需要在一个函数中测试所有的东西,但这不正确。如果你有任何例子,请给我提供链接 – 2013-03-19 09:07:20

+0

@RanuJain所以你说的测试将是'@ Transactional',也许会持续多个实体? – 2013-03-19 09:08:23

+0

是的......我们已经用SpringJunit编写了Junit类,但它没有给出正确的结果。有些地方我们有其他实体的依赖关系,然后在测试时,一切正常,但实际上当我们试图保存它的抛出错误时。因为在测试中它实际上并没有因为@Transaction而在数据库中插入数据。 – 2013-03-19 09:12:55