Доступ к статическим методам затрудняет написание тестов.
Либо передайте Locale с помощью конструктора, либо используйте установщик.
Самое простое изменение - добавить второй конструктор с параметром Locale в качестве параметра и использовать его для юнит-теста. Затем конструктор по умолчанию инициализирует поле из FacesContext.
Для более чистого дизайна вы должны извлечь Localizer
, где вы обрабатываете всю локализацию, чтобы затем отделить ShowProducts
, который не нуждается в FacesContext
от Localizer
, который делает.
Локализатор будет выглядеть примерно так:
public class Localizer {
public void localize() {
String localeParam = FacesContext.getCurrentInstance()
.getExternalContext().getRequestParameterMap().get("lang");
locale = new Locale(localeParam);
FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
}
}
Это не имеет ничего общего с ShowProducts
. Не уверен, что вам нужно getLanguge()
.