我已经在测试中使用了模拟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 条目(在发生异常后不要刷新会话)
答案 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);