Mockito:基本代码疑虑



我正在学习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;
    }
}

假设您的测试类是带注释的,并且使用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());
}

如果您确实需要测试它是否正确地持久化,那么内存中的数据库将是一种方法。

Mockito不适合测试处理持久层的用例。您应该使用嵌入式容器来测试持久层。嵌入式容器是模拟数据库的内存中数据库,创建速度快,非常适合单元测试。

看看这个SO问题,阅读第二个答案:

使用JUnit 测试EJB

相关内容

  • 没有找到相关文章

最新更新