Я пытаюсь проверить CreateQuery дб вызов, но получение исключения нулевого указателятестовый класс получает нулевые значения пути и запроса
@Override
public Member fetchMemberByNetworkId(String networkId) {
List<Member> memberList = new ArrayList<Member>();
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Member> c = cb.createQuery(Member.class);
Root<Member> root = c.from(Member.class);
Expression<String> path = root.get("networkid");
Expression<String> upper =cb.upper(path);
Predicate cp = cb.equal(upper, networkId.toUpperCase());
c.where(cb.and(cp));
Query query = entityManager.createQuery(c);
memberList = query.getResultList();
//List<Member> memberList = query.getResultList();
if(null != memberList && CollectionUtils.isNotEmpty(memberList)) {
return memberList.get(0);
}
else{
return new Member() ;
}
}
public class ExperimentBeanTransformerTest {
//~ Instance fields ------------------------------------------------------------------------------------------------
ExperimentBeanTransformer experimentBeanTransformer = new ExperimentBeanTransformer();
@Spy
@InjectMocks
UserGroupManagementService memberService = new UserGroupManagementServiceImplementation();
@Spy
@InjectMocks
UserGroupManagementDAO userGroupManagementDAO = new UserGroupManagementDAOImplementation();
@Mock
transient EntityManager entityManager ;
@Mock
CriteriaBuilder criteriaBuilder ;
@Mock
CriteriaQuery<Member> criteriaQuery;
@Mock
Root<Member> root;
@Mock
Expression expr;
@Mock
Path path;
@Mock
Predicate predicate;
transient Query query = mock(Query.class);
@Mock
TypedQuery<Member> querymem;
//~ Methods --------------------------------------------------------------------------------------------------------
@BeforeMethod
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testfecthFullNameOfUser() {
String networkId = "network";
List<Member> members = buildMembersList(5);
String queryname="Experiment.findCount";
final List<Member> members2 = new ArrayList<Member>(buildMembersList(5));
Expression<String> doublePath = root.get(networkId);
when(entityManager.getCriteriaBuilder()).thenReturn(criteriaBuilder);
when(criteriaBuilder.createQuery(Member.class)).thenReturn(criteriaQuery);
when(criteriaQuery.from(Member.class)).thenReturn(root);
when(root.get((networkId))).thenReturn(doublePath);
when(criteriaBuilder.upper(root.<String>get("networkid"))).thenReturn(expr);
when(criteriaBuilder.equal(expr, networkId.toUpperCase())).thenReturn(predicate);
when(entityManager.createQuery((String) any())).thenReturn(querymem);
when(query.getResultList()).thenReturn(members2);
when(memberService.fetchMemberByNetworkId(networkId)).thenReturn(members);
when(userGroupManagementDAO.fetchMemberByNetworkId(networkId)).thenReturn((Member) members);
experimentBeanTransformer.fecthFullNameOfUser(networkId);
}
я получаю запрос, нулевые значения пути. Должен ли я создавать экземпляр Path, я пытался, но не смог присвоить ему значение? Как проверить макет пути (root.get())
?