我使用mockito开始我的测试。首先,我需要测试.findAll(),这是一个CriteriaQuery...
UserFacade扩展了具有此findAll的AbstractFacade。
public abstract class AbstractFacade<T> {
private Class<T> entityClass;
public AbstractFacade(Class<T> entityClass) {
this.entityClass = entityClass;
}
protected abstract EntityManager getEntityManager();
....
public List<T> findAll() {
CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
CriteriaQuery<T> cq = cb.createQuery(entityClass);
Root<T> rootEntry = cq.from(entityClass);
CriteriaQuery<T> all = cq.select(rootEntry);
TypedQuery<T> allQuery = em.createQuery(all);
return allQuery.getResultList();
}
...我的测试:
@RunWith(MockitoJUnitRunner.class)
public class UserFacadeTest {
public UserFacadeTest() {
}
@Mock
private EntityManager mockedEM;
@Mock
private CriteriaQuery mockedCQ;
@Mock
private CriteriaQuery mockedCQAll;
@Mock
private Root mockedRoot;
@Mock
private CriteriaBuilder mockedCB;
@Mock
private TypedQuery mockedTQ;
private UserFacade userFacade;
List<User> userList= new ArrayList<>();
@Before
public void setUp() {
userFacade=new UserFacade();
userFacade.setEm(mockedEM);
when(mockedEM.getCriteriaBuilder()).thenReturn(mockedCB);
when(mockedCB.createQuery()).thenReturn(mockedCQ);
when(mockedCQ.from(User.class)).thenReturn(mockedRoot);
when(mockedCQ.select(mockedRoot)).thenReturn(mockedCQAll);
when(mockedEM.createQuery(mockedCQAll)).thenReturn(mockedTQ);
when(mockedTQ.getResultList()).thenReturn(userList);
}
@Test
public void testFindAll() {
System.out.println("findAll");
User user = new User(1, "username", "password", "email", new Date());
userFacade.create(user);
verify(mockedEM, times(1)).persist(any());
userList.add(user);
//next line cause NullPointerException
List list=userFacade.findAll();
assertTrue("Should return 1", 1==list.size());
}调试我的测试我看到了这个:
....
public List<T> findAll() {
CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
CriteriaQuery<T> cq = cb.createQuery(entityClass); //cq is null!!!!
Root<T> rootEntry = cq.from(entityClass); //cq is null!!!!
CriteriaQuery<T> all = cq.select(rootEntry);
TypedQuery<T> allQuery = em.createQuery(all);
return allQuery.getResultList();
}
...所以我想我传递“User.class”是错误的.我也要嘲笑这个?多么?
https://stackoverflow.com/questions/38158477
复制相似问题