如何模型用于单元测试服务的EntityManager



我正在尝试为我的公司编写一些单元测试,因此我不可能更改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。

最新更新