我正在学习Mockito,我很难理解一些事情。假设我想测试一个Doa方法,该方法获取对象列表并通过迭代列表将其保存在DB中。如何使用Mockito测试它。下面是代码示例。
import java.util.Iterator;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
@Repository
public class AuditDaoImpl {
@PersistenceContext(unitName = "somepersistance")
EntityManager entityManager;
public <T> boolean saveAuditData(List<T> dataList) {
Iterator<Data> itr = (Iterator<Data>) dataList.iterator();
while (itr.hasNext()) {
Data Data = (Data) itr.next();
Audit audit = new Audit();
audit.setUserName(Data.getUserName());
entityManager.persist(audit);
}
return true;
}
}
答案 0 :(得分:2)
假设您的测试类已注释并使用spring运行(使用@RunWith(SpringJUnit4ClassRunner.class)
和@ContextConfiguration("classpath:applicationContext.xml")
)注释,您就可以使用它了。如果您主要关注的是验证是否为每个元素调用了entityManager.persist(audit);
,那么这样的事情应该可行
@Autowired //Autowired to get mockito to inject into the spring-handled dao
@InjectMocks
AuditDaoImpl auditDao;
@Mock
EntityManager entityManager;
@Test
public void saveAllAudit_entityManagerShouldPersistAll() {
List<Data> dataList = new ArrayList<>();
dataList.add(new Data("username"));
//add more to list
auditDao.saveAuditData(dataList);
verify(entityManager, times(1)).persist(anyObject());
}
如果您确实需要测试它是否已正确保留,那么内存数据库将是您的最佳选择。
答案 1 :(得分:0)
Mockito对于测试处理持久层的案例很差。您应该使用嵌入式容器来测试持久层。嵌入式容器是一个内存数据库,可以模拟您的数据库,并且可以快速创建,使其成为单元测试的理想选择。
看看这个问题并阅读 SECOND 答案: