Mockito mock CassandraOperation Slice метод

Я использую инфраструктуру Mockito для написания фиктивных тестовых примеров Junit, приведенных ниже. Это мой класс Service для тестирования тестового кода Junit.

public class UserService {
@Autowired
private CassandraOperations template

public UserDTO getUserDTO(String date, String pagingState) {
        Select select = QueryBuilder.select().all()
                .from("tbl_user");
        select.where(QueryBuilder.eq(date, date));
        select.setFetchSize(30);
        if (pagingState != null) {
            select.setPagingState(PagingState.fromString(pagingState));
        }
        Slice<UserDTO> usgerDTO = template.slice(select, UserDTO.class);
        if(usgerDTO.hasNext()) {
        }
        return usgerDTO.get();
}

Класс теста написан

@RunWith(MockitoJUnitRunner.class)    
public class UserServiceTest {

@InjectMocks
    private UserService service ;

    @Mock
    private CassandraOperations template;

    @Mock
    private UserDTO userDTO;
    private String date= "2019-09";
 @Test(expected = Exception.class)
    public void test() {
        Slice<UserDTO>  userDTO= Mockito.mock(Slice.class);
        Select select = Mockito.mock(Select.class);

                Mockito.when(template.slice(select, UserDTO.class)).thenReturn(userDTO);
        metricReportDTO = service.getUserDTO(date, null);


    }
    }

Я получаю нулевые значения в этой строке

Slice<UserDTO> usgerDTO = template.slice(select, UserDTO.class);

Подскажите пожалуйста, как проверить метод template.slice

Примечание: я не должен использовать PowerMockito

Всего 1 ответ


Ваш фрагмент кода не имеет смысла, поскольку вы вызываете service.getMetricsReports(date, null) в своем тесте, но в UserService кода UserService есть только метод getUserDTO . Если предположить, что это всего лишь опечатка, то вам нужно использовать совпадения, чтобы заставить макет работать в ваше when .

Mockito.when(template.slice(any(Select.class), eq(UserDTO.class))).thenReturn(userDTO);

Это означает, что всякий раз, когда первый параметр является классом типа Select а второй равен UserDTO.class он возвращает userDTO если эти 2 параметра не соответствуют этим условиям, он возвращает null .

Вы также можете сделать так, чтобы он совпадал с точным Select предполагая, что он имеет переопределенный метод equals . В случае, если вы отправляете null pagingState то что-то вроде:

Select stubSelect = QueryBuilder.select().all()
                .from("tbl_user");
        stubSelect.where(QueryBuilder.eq(date, date));
        stubSelect.setFetchSize(30);

Mockito.when(template.slice(eq(stubSelect), eq(UserDTO.class))).thenReturn(userDTO);


Есть идеи?

10000