Есть много вопросов рефакторинга, в которых кто-то уже ответил. Однако я решил задать свой собственный вопрос. У меня возникли проблемы с рефакторингом Thread.sleep (1000), чтобы выполнить обратный отсчет в фрагменте кода ниже. Принимая класс тестирования программного обеспечения, я наткнулся на бумагу: «Действительно ли опасные запахи вредны: эмпирическое исследование», и я хотел узнать больше о области темы. Кто-нибудь может мне помочь, пожалуйста!Как реорганизовать спящую улитку
try (Socket client = new Socket("localhost", connector.getLocalPort()))
{
OutputStream output = client.getOutputStream();
for (ByteBuffer buffer : lease.getByteBuffers())
{
output.write(BufferUtil.toArray(buffer));
}
Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter()
{
@Override
public void onHeaders(HeadersFrame frame)
{
try
{
// Close the connection just after
// receiving the response headers.
client.close();
closeLatch.countDown();
}
catch (IOException x)
{
throw new RuntimeIOException(x);
}
}
}, 4096, 8192);
parseResponse(client, parser);
// We need to give some time to the server to receive and process the TCP FIN.
Thread.sleep(1000);
Session session = sessionRef.get();
Assert.assertTrue(session.isClosed());
Assert.assertTrue(((HTTP2Session)session).isDisconnected());
}
Спасибо за ваш ответ! Кажется, я не был ясно в своем посте. То, что я хочу, - это лучший подход, который заменяет расточительный и ненадежный Thread.sleep. Основное различие заключается в том, что я хочу использовать объекты синхронизации Java из пакета java.util.concurrent, чтобы немедленно проверить поток тестов, когда рабочие потоки завершили свою работу. – Paul
Я обновил последнюю часть своего ответа, это точно ориентировано на поток. Надеюсь, это то, что вам нужно. – ekostadinov
@Paul, пожалуйста, держите свой вопрос в чистоте и удалите комментарий ** спасибо **. На сайте есть четкая политика оценки ответов - * вверх/вниз * и * пометить как принято *. Благодарю. Я буду рад помочь вам, если это вам понадобится. – ekostadinov