小编use*_*276的帖子

如何模拟 Mono.flatMap() 中的方法?

我为某些服务编写单元测试,但我不明白为什么我模拟的某些方法不调用。我尝试测试testDeleteDeviceWhenDeviceNotFound()方法并且通过了,但是当我尝试时testDeleteDeviceSuccess()遇到问题

@Service
@Slf4j
@AllArgsConstructor
public class DeviceService {

    private DeviceRepository deviceRepository;
    private SyncSender syncSender;

    public Mono<Void> deleteDevice(long deviceId) {
        return deviceRepository
                .findById(deviceId)
                .switchIfEmpty(Mono.error(new NotFoundException()))
                .flatMap(existingDevice -> deviceRepository
                        .delete(existingDevice)
                        .then(syncSender.sendDeviceDelete(existingDevice.getDeviceId()))
                );
    }
Run Code Online (Sandbox Code Playgroud)

和我的测试

   @ExtendWith(MockitoExtension.class)
class DeviceServiceTest {
    @Mock
    private DeviceRepository deviceRepository;
    @Mock
    private SyncSender syncSender;
    @InjectMocks
    private DeviceService deviceService;

    @Test
@DisplayName("Test deleteDevice when NotFoundException")
void testDeleteDeviceWhenDeviceNotFound() {
    long deviceId = 100L;
    Mockito.when(deviceRepository.findById(deviceId)).thenReturn(Mono.empty());
    Mono<Void> mono = deviceService.deleteDevice(deviceId);
    StepVerifier
            .create(mono)
            .expectErrorMatches(throwable -> throwable instanceof NotFoundException)
            .verify();
}
    @Test
    @DisplayName("Test …
Run Code Online (Sandbox Code Playgroud)

java unit-testing mockito spring-webflux spring-data-r2dbc

1
推荐指数
1
解决办法
5570
查看次数