Im пытается найти лучший способ проверить класс кэша, который в настоящее время используется им ... Я хотел бы заменить ClientFactory ниже, когда этот класс запускается в тестах .... I хотели бы оставить структуру класса как можно больше, но так как он имеет частный конструктор IM борется, чтобы думать, что лучший способ, чтобы проверить его ..Тестирование класса с помощью частного конструктора
public class MyCache {
private final long TIME_OUT
private static MyCache instance = null;
private final HashMap<String, MyObject> cache = new HashMap<String, MyObject>();
private MyCache() {
}
public static MyCache getInstance() {
if (instance == null) {
instance = new MyCache();
}
return instance;
}
public MyObject getDetails(String id) throws Exception {
MyObject myObject = cache.get(id);
if (myObject != null) {
return myObject;
} else {
try {
// want to be able to replace ClientFactory with test stub
Client client = ClientFactory.createClient();
myObject = client.getMyObject(id);
} catch (NotFoundException nf) {
.... log error
}
return myObject;
}
}
}
Даже с публичным конструктором, так как createClient статический метод, это очень трудно издеваться над ним. Узнайте об инъекции зависимостей, не используйте singleton anti-pattern, добавьте ClientFactory в открытый конструктор, убедитесь, что createClient - это метод экземпляра, а не статический метод. –
Я бы также подумал о том, чтобы не изобретать колесо. Кэш не является потокобезопасным (что может быть или не быть проблемой), и в Guava доступны готовые кэш-кеши, например. –
благодарит за комментарии .... оценил – blu10