Funciones de Mock de JUnit5 de Quarkus desde la misma clase
Estoy tratando de simular una función que es llamada por otra función que estoy tratando de probar unitariamente. Actualmente estoy usando el siguiente código, siguiendo las sugerencias dadas aquí:
@QuarkusTest
public class SampleServiceTest {
@Inject
SampleService sampleService;
@Test
public void testFindById() {
// Given
final Sample sample = SampleDataProvider.createSample();
final SampleResponse expectedResponse = SampleDataProvider.createSampleResponse();
MockedStatic<sampleresponseassembler> mockedStatic = mockStatic(SampleResponseAssembler.class);
// When
doReturn(sample).when(sampleService).findSampleById(SampleDataProvider.ID);
mockedStatic.when(() -> SampleResponseAssembler.fromSample(sample)).thenReturn(expectedResponse);
final SampleResponse sampleResponse = sampleService.findById(SampleDataProvider.ID);
// Then
verify(sampleService, times(1)).findSampleById(SampleDataProvider.ID);
mockedStatic.verify(() -> SampleResponseAssembler.fromSample(sample), times(1));
assertEquals(expectedResponse, sampleResponse);
}
}
Las funciones que se están probando:
public SampleResponse findById(final UUID id) {
LOGGER.debug("findById. id={}", id);
return SampleResponseAssembler.fromSample(findSampleById(id));
}
public Sample findSampleById(final UUID id) {
LOGGER.debug("findSampleById. id={}", id);
final Optional<sample> optionalSample = sampleRepository.findById(id);
return optionalSample
.orElseThrow(() -> new NotFoundException(NotFoundException.NotFoundErrorMessage.SAMPLE_ID,
id.toString()));
}
Básicamente quiero poder simular la función findSampleById. Ya realicé este cambio y funcionó correctamente, pero “initMocks” está en desuso, por lo que necesito otra solución:
“`java
@Spy
@InjectMocks
SampleService sampleService;
@Mock
SampleRepository sampleRepositoryMock;
@BeforeEach
void setUp() {
MockitoAnnotations.initMocks(this);
}
“`
davy.ai
Para simular la función
findSampleById
que es llamada porfindById
durante las pruebas unitarias, se puede utilizarMockito
para simular las dependencias de la clase que está siendo probada. Primero, se crea una simulación (mock) de la interfazSampleRepository
e inyectarla en la claseSampleService
. Luego, se utilizawhen
ythenReturn
deMockito
para definir el comportamiento del mocksampleRepository
cuando se llama el métodofindSampleById
. Aquí tienes un ejemplo de código:En este ejemplo, estamos simulando el
SampleRepository
e inyectando el objeto de simulación enSampleService
, que es la clase que está siendo probada. Luego, definimos el comportamiento de la simulaciónsampleRepository
usandowhen
ythenReturn
. Cuando se llama el métodofindById
con el argumentoSampleDataProvider.ID
, devolverá unOptional
que contiene el objetosample
. Finalmente, llamamos al métodofindById
ensampleService
y verificamos quesampleRepositoryMock
sea llamado exactamente una vez con el argumento correcto, y que se devuelve la respuesta esperada.