如何在ConstraintValidator实现中模拟EntityManager

时间:2015-11-29 12:25:30

标签: hibernate intellij-idea gradle junit mockito

我已经在测试中使用了模拟EntityManager。 但是现在我还需要在我的真实类(自定义约束注释的验证器)中模拟EntityManager。

在测试中我这样做

@RunWith(MockitoJUnitRunner.class)
public class SomeConstraintValidatorTest {

    @Mock
    private EntityManager entityManager;

在验证器中我不能这样做,因为无法在Intellij Idea中解析导入org.junit.runner.RunWith。 对于构建我使用Gradle。' gradle deploy'成功,但当我开始测试时,我在Idea控制台中得到以下错误

  

错误:(6,25)java:package org.junit.runners不存在   错误:(21,2)java:找不到符号符号:class RunWith

我需要模拟EntityManager的原因是在测试

时出现以下错误
  

org.hibernate.AssertionFailure:com.clients.entity.CClient中的null id   条目(在发生异常后不要刷新会话)

2 个答案:

答案 0 :(得分:1)

@RunWith注释仅适用于测试类。如果您想在验证类中注入 EntityManager ,我建议使用字段注入。

我假设你的 ConstraintValidator 有一个名为'entityManager'的字段。

@RunWith(MockitoJUnitRunner.class)
public class SomeConstraintValidatorTest  {
    @Mock
    private EntityManager entityManager;
    @InjectMocks
    private ConstraintValidator myValidator;
}

可以找到更多信息here

答案 1 :(得分:0)

我不知道为什么现场注射不起作用,但我找到了原始问题的另一种解决方案。 在我得到例外的行之前,我写了

entityManager.setFlushMode(FlushModeType.COMMIT);