Одна из вещей около вершины мой "к - действительно" перечисляет для PBS, должен портировать внутренний протокол Google Буферный сравнительный тест производительности - это - главным образом случай взятия конфиденциальных форматов сообщения и превращения их в совершенно мягкие и затем выполнение того же для данных.
, Когда это было сделано, я предположу, что Вы могли создать те же сообщения в Экономии и затем сравнить производительность.
, Другими словами, у меня еще нет данных для Вас - но надо надеяться за следующие несколько недель...
Технически возможно переключить System.in
, но в целом это было бы более надежно не вызывать его непосредственно в вашем коде, но добавить уровень косвенности, чтобы источник ввода контролировался из одной точки в вашем приложении. Как именно вы это делаете, является деталью реализации - предложения по внедрению зависимостей хороши, но вам не обязательно вводить сторонние фреймворки; вы можете, например, передать контекст ввода / вывода из вызывающего кода.
Как переключить System.in
:
String data = "Hello, World!\r\n";
InputStream stdin = System.in;
try {
System.setIn(new ByteArrayInputStream(data.getBytes()));
Scanner scanner = new Scanner(System.in);
System.out.println(scanner.nextLine());
} finally {
System.setIn(stdin);
}
Попробуйте провести рефакторинг кода, чтобы использовать внедрение зависимостей . Вместо того, чтобы иметь метод, который напрямую использует System.in
, пусть этот метод принимает в качестве аргумента InputStream
. Затем в своем тесте junit вы сможете пройти тестовую реализацию InputStream
вместо System.in
.
Есть несколько способов приблизиться к этому. Самый полный способ - передать InputStream при запуске тестируемого класса, который является поддельным InputStream, который передает смоделированные данные вашему классу. Вы можете взглянуть на структуру внедрения зависимостей (такую как Google Guice), если вам нужно много делать это в вашем коде, но простой способ:
public class MyClass {
private InputStream systemIn;
public MyClass() {
this(System.in);
}
public MyClass(InputStream in) {
systemIn = in;
}
}
При тестировании вы должны вызвать конструктор, который принимает входной поток. Вы даже делаете этот пакет конструктора закрытым и помещаете тест в тот же пакет, чтобы другой код обычно не рассматривал его использование.
Одно из применений static_assert
может заключаться в том, чтобы гарантировать, что структура (то есть интерфейс с внешним миром, например сеть или файл) имеет именно тот размер, который вы ожидать. Это позволит выявить случаи, когда кто-то добавляет или изменяет член структуры, не осознавая последствий. static_assert
поднимет его и предупредит пользователя.
InputStream in = System.in;
...
Scanner scanner = new Scanner( in );
После:
InputStream in = new FakeInputStream();
...
Scanner scanner = new Scanner( in );
Хотя я думаю, вам лучше проверить, как ваш класс должен работать с данными, считываемыми из входного потока, а не с тем, как они читаются оттуда.