Как написать макетный класс для JUnit для R2DBC DatabaseClientJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как написать макетный класс для JUnit для R2DBC DatabaseClient

Сообщение Anonymous »

В приложении Spring Boot у меня есть класс репозитория, в котором я выполняю некоторые операции с БД с помощью R2DBC с использованием DatabaseClient.
Мой код выглядит примерно так:

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

return client.sql(sqlToSearch)
.bind("alternateCodeType", alternateCodeType)
.bind("alternateCode", alternateCode)
.map(locationR2DBCMapper::apply).one();
где locationR2DBCMapper — это мой собственный класс сопоставителя BiFunction.
Код класса сопоставителя выглядит следующим образом:

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

public class LocationR2DBCMapper implements BiFunction {

@Override
public Location apply(Row row, Object o) {
if(row.get(0)!=null)
{
Location location = new Location();
location.setId(row.get("location_id", Long.class));
location.setLocationName(row.get("location_name", String.class));
location.setLocationType(row.get("location_type", String.class));
location.setProjectionMsg(row.get("projection_msg", String.class));
location.setIsFacility(row.get("is_facility",Boolean.class));
return location;
}
else {
return new Location();
}
}
}
Теперь я просто хочу написать тестовый пример JUnit для этого класса репозитория, где мне нужно имитировать эту операцию вызова БД. В частности, эта строка:

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

client.sql(sqlToSearch)
.bind("alternateCodeType", alternateCodeType)
.bind("alternateCode", alternateCode)
.map(locationR2DBCMapper::apply).one();
где клиент является объектом DatabaseClient.
Я попробовал этот подход:

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

@BeforeEach
void setUp() {
databaseClientMock = Mockito.mock(DatabaseClient.class);

locationR2DBCMapperMock = Mockito.mock(LocationR2DBCMapper.class);

DatabaseClient databaseClientMock = mock(DatabaseClient.class);
DatabaseClient.GenericExecuteSpec executeSpecMock = mock(DatabaseClient.GenericExecuteSpec.class);

Mono monoResultMock = mock(Mono.class);

locationCustomRepositoryImplMock = new LocationCustomRepositoryImpl(databaseClientMock,locationR2DBCMapperMock);
}

@Test
public void getLocationByLocationTypeTest()
{
RowsFetchSpec rowsFetchSpecMock = mock(RowsFetchSpec.class);
when(databaseClientMock.sql(anyString())).thenReturn(executeSpecMock);
when(executeSpecMock.map(Mockito.any(BiFunction.class))).thenReturn(rowsFetchSpecMock);
Flux resultFluxMock = Flux.empty(); // Replace this with your own Flux instance
when(rowsFetchSpecMock.all()).thenReturn(resultFluxMock);

//Mockito.when(databaseClientMock.sql(anyString())).thenReturn(Flux.just(Location.builder().locationName("someName").id(Long.valueOf(123)).build()));
}
но в этой строке выдается одна ошибка: "Невозможно разрешить метод 'thenReturn(Flux)'"

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

when(rowsFetchSpecMock.all()).thenReturn(resultFluxMock);
Как я могу посмеяться над этим и исправить ошибку?

Подробнее здесь: https://stackoverflow.com/questions/769 ... baseclient
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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