Я думаю, что вы должны ввести интерфейс, чтобы поместить слой абстракции между коллекцией глобальных переменных и ее потребителями.
interface GlobalVars {
String get(String key);
}
Вы должны представить конструктор с ограниченной областью действия, вероятно, package-private
MyClass(GlobalVars globals, Map<String, String> params) {
// create the object
}
А затем предоставьте public static
фабричные методы для использования этого конструктора.
public static MyClass newMyClass(Map<String, String> params) {
return new MyClass(GlobalClass.GLOBAL_VAR, params);
}
С этим проектом вы можете передать фиктивную реализацию GlobalVars
в модульном тесте из того же пакета, явно вызвав конструктор.
Приложение : Поскольку params
представляется обязательным полем, я бы определенно сделал это final
и избегал бы подхода, при котором вы добавляете мутаторы для их перезаписи.
private final Map<String, String> params;
Кроме того, сделайте защитную копию для предотвращения l33t h4x.
this.params = Collections.unmodifiableMap(params);