Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Вопрос Программисту - как заменить этот синглтон на его мок?

12.11.18 15:32
Re: Вопрос Программисту - как заменить этот синглтон на его мок?
 
Программист коренной житель
в ответ dymanoid 09.11.18 21:16
Твой код синглтона - говно, потому что он не потокобезопасный.

И это говорит человек, который запостил неработающий код :D

Для того, чтобы мой пример был потокобезопасным нужно добавить 4 строчки (две из которых будут скобками).


Это потому что я показываю, каким говённым может быть древний лигаси-код из огромного продукта, где боятся лишний байт подвинуть.

Мне это можешь не рассказывать, я, как и многие, в этом живу :) Однако это не значит, что легаси код нельзя изменять.


Ты присобачил к синглтону интерфейс и открыл сеттер. Это не решение.

Сеттер стал видимым только для одной сборки. Интернел - это не открытый сеттер. Те же самые MS очень часто используют internel.


Ты нарушаешь контракт, данный всем клиентам, ради очень сомнительной цели "протестить чего-то там, что юзает этот синглтон".

Во-первых, тестирование - это не то, чтобы "очень сомнительная" цель.

Во-вторых, инжект нужен для того, чтобы тестировать те части, которые этот синглтон используют.


Во-вторых, ты просто не решил поставленную задачу. Из моего примера видно, что я хочу протестить метод синглтона, а ты мне предлагаешь этот метод заменить на заглушку.
В твоем примере, метод синглтона называется Instance.

Надо четко различать, что именно ты хочешь тестировать. Если ты хочешь тестировать синглтон (паттерн), то это один тест. И личто я не вижу смысла в этом тесте.

Если ты хочешь тестировать компоненты, которые этот синглтон используют - надо делать возможность для инжекта.

Если ты хочешь тестировать возвращаемую синглтоном реацизацию (в данном случае ConfigRepository), то надо делать возможность для этого теста.



 

Перейти на