Я не знаю, как извлечь значение рядом с "unixtime".
Чтобы извлечь значения из списка, вы можете перебирать список, проверять каждое значениепри необходимости и вернуть значение, когда вы нашли совпадение, например:
for (String line : lines) {
if (line.startsWith("unixtime: ")) {
return line;
}
}
Чтобы извлечь значение, которое следует после «unixtime:» в строке, вы можете использовать несколько стратегий:
line.substring("unixtime: ".length())
line.replaceAll("^unixtime: ", "")
line.split(": ")[1]
- ...
Кстати вам действительно нужносписок строк?Если нет, то вы можете сэкономить память и сократить обработку ввода, если вы выполняете эту проверку при чтении потока ввода с URL-адреса и прекращаете чтение сразу же после того, как вы нашли именно то, что вам нужно.
И как можноЯ тестирую ошибку NetWork для класса GetDataService.
Чтобы проверить, правильно ли обрабатываются сетевые ошибки, вам нужно сделать части кода, которые могут генерировать сетевые ошибки, инъекционными.Затем в ваших тестовых примерах вы можете ввести код замены, который будет генерировать исключение, и убедиться, что программа правильно обрабатывает исключения.
Один из методов - «извлечь и расширить».То есть, извлеките вызов url.openStream()
для выделенного метода:
InputStream getInputStream(URL url) throws IOException {
return url.openStream();
}
и замените в своем коде url.openStream()
на вызов getInputStream(url)
.Затем в своем тестовом методе вы можете переопределить этот метод, выдав исключение, и проверить, что происходит.Используя плавные утверждения с AssertJ:
@Test
public void test_unixtime() {
UnixTimeExtractor extractor = new UnixTimeExtractor() {
@Override
InputStream getInputStream(URL url) throws IOException {
throw new IOException();
}
};
assertThatThrownBy(extractor::unixtime)
.isInstanceOf(RuntimeException.class)
.hasMessage("Error while reading from stream");
}
Вы можете сделать то же самое для чтения из входного потока.