Я пытаюсь использовать блокирующие переменные для моего асинхронного тестирования, следуя этому вопросу
Проверка макета Спока с указанным временем ожидания
Я просто хочу знать, что конецМетод был вызван.Я попытался скопировать принятый ответ, но блокирующая переменная не была установлена.
Блокирующая переменная просто отключается.
Итак, у меня есть
@TestConfiguration
static class ITRouterConfiguration {
private DetachedMockFactory factory = new DetachedMockFactory()
@Bean
IVoucherService voucherService() {
return factory.Mock(IVoucherService)
}
}
@Autowired
private IVoucherService voucherService
def 'Should create a voucher'() {
MockQueue mockQueue = mockDestinationManager.createQueue("SERVICE_REQUEST")
Assert.assertNotNull(jmsTemplate);
Assert.assertNotNull(mockDestinationManager);
given:
def result = new BlockingVariable<Boolean>(0.2) // 200ms
voucherService.createVoucher() >> {
result.set(true)
}
when: 'a message is sent'
jmsTemplate.send(mockQueue, new MessageCreator() {
@Override
Message createMessage(Session session) throws JMSException {
TextMessage message = session.createTextMessage(BODY)
message.setStringProperty(ACTION_TYPE, CREATE)
return message
}
})
//sleep(2000)
then: 'check create voucher was called once'
result.get()
}
BlockingVariable.get() timed out after 10.00 seconds
at spock.util.concurrent.BlockingVariable.get(BlockingVariable.java:113)
at uk.co.cpp.servicerequestrouter.CreateVoucherSpec.Should create a voucher(CreateVoucherSpec.groovy:81)
Если я выйду из спящего режимаи просто утверждают
1 * voucherService.createVoucher(_)
это работает, но я не хочу.