2015-01-16 110 views
1
@Bean 
public EntityManager(EntityManagerFactory emf) { 
    //... 
} 

如何在JUnit测试中快速模拟这两种豆(em + emf)? 是否有一些框架允许我定义例如@Mock EntitiyManager em;如何在春季单元测试中快速模拟服务?

+0

你见过Mockito和Powermock吗? – vikingsteve

+0

我认为每个需要模拟的对象都需要相当多的配置。我宁愿寻找一个框架,通过例如在该类上应用简单的配置语句或注释来嘲笑该类。 – membersound

回答

3

看看springockito连同spring-test。它将spring和mockito集成在一起,并支持基于注释的mock和在spring applicationContext中配置的mock。

+0

太好了,正是我在找的东西:一个简单的'@ ReplaceWithMock'来模拟任何服务。 – membersound

3

您似乎知道@Mock注释,所以大概你知道Mockito是什么。你只是嘲笑EntityManager完全一样的方式,你会嘲笑其他任何东西。

@Mock EntitiyManager em; 
initMocks(); 
MyService myService = new MyServiceImpl(em); 
+1

史蒂夫,很好的名字,很好的答案:) – vikingsteve

+0

史蒂夫,你不觉得嘲笑EntityManager不是编写单元测试的最佳方式吗?它违反了众所周知的“不要嘲笑你不自己的原则”。我会说,使用嵌入式数据库编写测试并测试真实组件,而不是假设EntityManager会做什么,并嘲笑/扼杀我们的期望,实际上会更好。 –

+1

我使用内存数据库进行测试,但有些东西使用mock进行了更好的测试。例如,如果我想测试一个服务方法是否能够正确处理从'em.persist'调用的异常,那么通过使用模拟的EntityManager来引发异常并验证对它的处理是非常有效的。 – Steve

相关问题