Почему при высмеивании предиката возвращается нулевой указатель?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему при высмеивании предиката возвращается нулевой указатель?

Сообщение Anonymous »

Мой предикат возвращает нулевой указатель при выполнении.
Мой тестовый код:

Код: Выделить всё

public class CompanyRepositoryTest {

@Mock
private EntityManager entityManager;

@Mock
private CriteriaBuilder criteriaBuilder;

@Mock
private CriteriaQuery criteriaQuery;

@Mock
private Root root;

@Mock
private TypedQuery typedQuery;

@Mock
private Path path;

@Mock
private Expression express;

@InjectMocks
private CompanyRepositoryImpl companyRepository;

@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
}

@Test
@DisplayName("Should find Company by CNPJ and return success")
void findByCnpjSuccess() {
String cnpj = "123456789";

Company company = new Company();
company.setCnpj(cnpj);

List companies = new ArrayList();
companies.add(company);

when(entityManager.getCriteriaBuilder()).thenReturn(criteriaBuilder);
when(criteriaBuilder.createQuery(Company.class)).thenReturn(criteriaQuery);
when(criteriaQuery.from(Company.class)).thenReturn(root);

when(root.get("cnpj")).thenReturn(path);

Predicate predicate = mock(Predicate.class);
when(criteriaBuilder.and(any())).thenReturn(predicate);
when(criteriaBuilder.equal(path, cnpj)).thenReturn(predicate);

// Criando o Predicate corretamente
//      Predicate predicate = criteriaBuilder.equal(root.get("cnpj"), cnpj);

// Configurando o mock para retornar o Predicate criado
//      when(criteriaBuilder.equal(root.get("cnpj"), cnpj)).thenReturn(predicate);

when(entityManager.createQuery(criteriaQuery)).thenReturn(typedQuery);
when(typedQuery.getResultList()).thenReturn(companies);

List result = companyRepository.findByCnpj(cnpj);

assertEquals(1, result.size());
assertEquals(cnpj, result.get(0).getCnpj());

verify(entityManager).getCriteriaBuilder();
verify(criteriaBuilder).createQuery(Company.class);
verify(criteriaQuery).from(Company.class);
verify(criteriaBuilder).equal(root.get("cnpj"), cnpj);
verify(entityManager).createQuery(criteriaQuery);
verify(typedQuery).getResultList();
}

}
И мой метод проверен

Код: Выделить всё

@Autowired
private EntityManager manager;

@Override
public List findByCnpj(String cnpj) {
CriteriaBuilder builder = manager.getCriteriaBuilder();
CriteriaQuery query = builder.createQuery(Company.class);
Root root = query.from(Company.class);

Predicate predicate = builder.and(builder.equal(root.get("cnpj"), cnpj));
query.select(root).where(predicate);

TypedQuery typedQuery = manager.createQuery(query);
return typedQuery.getResultList();
}
Я пытаюсь выполнить тест с помощью Mockito.


Подробнее здесь: https://stackoverflow.com/questions/784 ... ll-pointer
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»