【发布时间】:2021-12-27 17:58:17
【问题描述】:
我正在尝试模拟一个由我尝试进行单元测试的其他函数调用的函数。我目前正在使用以下代码,遵循here 给出的建议:
@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);
}
}
正在测试的功能:
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()));
}
我基本上希望能够模拟 findSampleById 函数。我已经进行了此更改并且它工作正常,但“initMocks”已被弃用,因此我需要另一个解决方案:
@Spy
@InjectMocks
SampleService sampleService;
@Mock
SampleRepository sampleRepositoryMock;
@BeforeEach
void setUp() {
MockitoAnnotations.initMocks(this);
}
【问题讨论】:
标签: java unit-testing testing mockito quarkus