Existe uma maneira de ScheduledExecutorService.scheduleAtFixedRate teste de unidade sem usar Thread.sleep?

votos
0

Gostaria de teste de unidade uma classe que executa uma tarefa usando ScheduledExecutorService.scheduleAtFixedRate, e eu não consigo encontrar uma maneira de Schedule várias execuções da tarefa em um teste de unidade sem usar Thread.sleep, que é lento e não como precisa quanto eu gostaria. Existe alguma maneira de passar uma referência de tempo zombado ao serviço executor ou outras soluções alternativas para simular a passagem do tempo?

Publicado 02/12/2019 em 23:59
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Testes Unitários verificar o comportamento de seu código em isolamento de suas dependências.

As implementações ScheduledExecutorServicesão fornecidos pela JVM e, portanto, não o seu código, mas uma dependência que devem ser substituídos com um duplo teste enquanto UnitTesting seu código. (Pode haver uma configuração válida para um teste que necessita da ScheduledExecutorServiceaplicação a ser executado, mas este não é um teste de unidade , em seguida.)

Portanto, caso você está escrevendo um teste de unidade (e não algum outro tipo de teste como por exemplo testes de integração , que acontece de estar usando o framwork JUnit ) você deve criar uma simulação para a ScheduledExecutorServiceinterface usando uma plataforma de simulacros (como Mockito ou equivalente) e verificar se o seu código chama o método desejado na simulação.

Para habilitar o teste para esta verificação você deve injetar a implementação de ScheduledExecutorServiceinterface no seu código (de preferência via injeção de construtor ) e não ter sua unidade em teste adquiri-lo em si, de modo que você tem uma costura em que você pode trocar a implementação real da ScheduledExecutorServiceinterface de whith o mock para o propósito de teste de unidade.

Respondeu 03/12/2019 em 01:29
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more