Вопрос Программисту - как заменить этот синглтон на его мок?
Твой код синглтона - говно, потому что он не потокобезопасный.
И это говорит человек, который запостил неработающий код :D
Для того, чтобы мой пример был потокобезопасным нужно добавить 4 строчки (две из которых будут скобками).
Это потому что я показываю, каким говённым может быть древний лигаси-код из огромного продукта, где боятся лишний байт подвинуть.
Мне это можешь не рассказывать, я, как и многие, в этом живу :) Однако это не значит, что легаси код нельзя изменять.
Ты присобачил к синглтону интерфейс и открыл сеттер. Это не решение.
Сеттер стал видимым только для одной сборки. Интернел - это не открытый сеттер. Те же самые MS очень часто используют internel.
Ты нарушаешь контракт, данный всем клиентам, ради очень сомнительной цели "протестить чего-то там, что юзает этот синглтон".
Во-первых, тестирование - это не то, чтобы "очень сомнительная" цель.
Во-вторых, инжект нужен для того, чтобы тестировать те части, которые этот синглтон используют.
Во-вторых, ты просто не решил поставленную задачу. Из моего примера видно, что я хочу протестить метод синглтона, а ты мне предлагаешь этот метод заменить на заглушку.В твоем примере, метод синглтона называется Instance.
Надо четко различать, что именно ты хочешь тестировать. Если ты хочешь тестировать синглтон (паттерн), то это один тест. И личто я не вижу смысла в этом тесте.
Если ты хочешь тестировать компоненты, которые этот синглтон используют - надо делать возможность для инжекта.
Если ты хочешь тестировать возвращаемую синглтоном реацизацию (в данном случае ConfigRepository), то надо делать возможность для этого теста.