Mockito mock CassandraOperation Slice метод - PullRequest
0 голосов
/ 14 января 2020

Я использую инфраструктуру 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);


    }
    }

В этой строке я получаю значения Null

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

Не могли бы вы подсказать мне, как проверить метод template.slice

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

1 Ответ

1 голос
/ 15 января 2020

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

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

Это означает, что всякий раз, когда первый параметр является классом типа Select, а второй равен UserDTO.class, возвращайте userDTO, если эти 2 параметра не соответствуют этим условиям, это будет return 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);

...