我正在尝试为我的公司编写一些单元测试,因此我不可能更改Sourcecode中的任何内容,而是在测试中更改所有内容。我正在使用Java8,Spring,Mockito和Junit4。
问题:有一些与EntityManager的服务,可以通过依赖关系实例化
@PersistenceContext(unitName = someName)
private EntityManager em;
我试图嘲笑它并将其注入我的classunderstest,就像我嘲笑所有其他班级一样,但这不起作用。
@InjectMocks
@Autowired
private SomeService testedSomeService;
在运行第一个测试之前,总有" IllegalStateException:无法加载应用程序上下文",并提示Entity Manager。如果我对注释进行注释,则每种方法都可以很好地测试(方法除外,使用EntityManager)。
是否有一种简单的方法来模拟EntityManager?还是我如何在测试阶段注入依赖性?
我感谢任何帮助!
尝试以下:
@RunWith(MockitoJUnitRunner.class)
public class Test {
@Mock
private EntityManager em;
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
Mockito.reset(em);
}
//your junits
}
当然可以。您使用@mock,仅此而已。@InjectMocks用于使用EntityManager的服务,而不是用于EntityManager。@autowired用于通过上下文进行真实的实例和注入,这仅存在于集成测试中,而不是在单位测试中,就像您在这里所做的那样。只需使用@mock。